2012-02-24 67 views
2

的Rails 3.0.11
紅寶石1.9.3dev(2011-09-23修訂33323)x86_64的Linux的]
郵件寶石訴2.2.19
後綴訴2.7 .0紅寶石上的ActionMailer接收字符編碼鐵軌發出

我管received emails to an actionmailer。除非收到的電子郵件沒有正確編碼,否則這通常運行良好。

我已經嘗試了多種方法,但始終以UTF-8錯誤中的無效字節序列結尾爲

這是我嘗試正確編碼/強制正確的編碼中的ActionMailer:

email.text_part.decoded.force_encoding('UTF-8').encode('UTF-8', undef: :replace, invalid: :replace, replace: "") 

這是我轉發郵件到我的應用程序在/ etc(內容/ aliases文件通過的建議Ruby on Rails的指南)

theaddress: "|/usr/local/rvm/bin/ruby-1.9.3-rc1 /var/www/myapp/script/rails runner -e mailer 'Mymailer.receive(STDIN.read)'" 

我也試圖通過管道將郵件通過iconv第一

theaddress: "|iconv -t UTF-8 -c |/usr/local/rvm/bin/ruby-1.9.3-rc1 /var/www/myapp/script/rails runner -e mailer 'Mymailer.receive(STDIN.read)'" 

我也使用Encding嘗試::轉換

Encoding::Converter.new("UTF-8//IGNORE", "UTF-8") 


感謝任何的洞察力和幫助!

解決方案

我不得不添加以下到我的環境文件:

Encoding.default_external = Encoding::UTF_8 
Encoding.default_internal = Encoding::UTF_8 

此外,我除去任何force_encoding和編碼方法。所以下面現在的作品:

email.text_part.decoded 
+0

你應該張貼您的解決方案作爲一個答案。 – 2012-07-19 12:25:57

回答

2

你確定傳入電子郵件的編碼是UTF-8?我的解決辦法是從header.raw_source

/charset=(?<charset>[^\s]+)\s?/ =~ part.header.raw_source 

搶字符集,如果不爲null,GSUB任何報價,並嘗試編碼

charset.gsub!('"', '') 
raw = part.body.to_s 
raw.force_encoding(charset) 
decoded = raw.encode("UTF-8")