2013-05-31 118 views
4

我使用的郵件寶石發送E-mail用UTF-8的內容使用此代碼紅寶石郵件寶石 - 設置字符集在交付塊

Mail.defaults do 
    ... 
end 

Mail.deliver do 
    from "[email protected]" 
    to  "[email protected]" 
    subject "Mäbülö..." 
    body "Märchenbücher lösen Leseschwächen." 
end 

這工作,但給人的警示

Non US-ASCII detected and no charset defined. 
Defaulting to UTF-8, set your own if this is incorrect. 

現在經過多次嘗試,諮詢郵件gem的生成文檔以及源代碼,我仍然無法設置字符集。有一種方法charset=在Message.rb,但是當我添加調用字符集,像這樣:

Mail.deliver do 
    from "[email protected]" 
    to  "[email protected]" 
    charset "UTF-8" 
    subject "Mäbülö..." 
    body "Märchenbücher lösen Leseschwächen." 
end 

我得到這個引發ArgumentError:

/usr/local/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/message.rb:1423:in `charset': wrong number of arguments (1 for 0) (ArgumentError) 

如何設置內提供的字符集塊?

回答

10

mail.charset()返回當前的字符集,它不允許設置一個,也不接受任何參數。

要做到這一點,你需要使用mail.charset = ...

它實際上可能塊中有:

Mail.deliver do 
    from "[email protected]" 
    to  "[email protected]" 
    subject "Mäbülö..." 
    body "Märchenbücher lösen Leseschwächen." 
    charset = "UTF-8" 
end 

它也可以不使用塊:

mail   = Mail.new 
mail.charset = 'UTF-8' 
mail.content_transfer_encoding = '8bit' 

mail.from = ... 
mail.to  = ... 
mail.subject = ... 

mail.text_part do 
    body ... 
end 

mail.html_part do 
    content_type 'text/html; charset=UTF-8' 
    body ... 
end 

mail.deliver! 
+0

謝謝!難道這是在紅寶石的一般處理塊的一些限制,然後呢?本身可能是一個有趣的問題。 – gpinkas

+0

@gpinkas:我更新了答案,因爲實際上可以在塊內分配字符集。 – maxdec

+0

太棒了,不幸我不能+2你:)謝謝你的研究! – gpinkas

-3

在文件的開頭添加

# encoding: utf-8 

+0

這不會改變任何東西。警告仍然存在。不知何故,我必須在消息類中設置字符集。請注意,這不是一個編碼問題,變音器交付得很好! – gpinkas

1

您需要設置編碼也爲個別部分。通過maxdec顯示它。確保你也爲text_part做了這個。

這適用於我。

mail = Mail.deliver do 
    charset='UTF-8' 
    content_transfer_encoding="8bit" 

    require 'pry';binding.pry 
    to  '[email protected]' 
    from '[email protected]' 
    subject "Tet with äöüß" 

    text_part do 
    content_type "text/plain; charset=utf-8" 
    body <<-EOF 
     this is a test with äöüß 
    EOF 
    end 
end 

mail.deliver!