2011-09-20 5 views
0

Ruby on ActionMailerで作業しています。私がしたことは、Gmailのアカウントをポーリングするバックグラウンドプロセスがあり、私は 'RFC822'プロトコルでメールを取得しているということです。私はこれらのメールを自分のActionMailerクラス内のreceiveメソッドに送ります。ruby​​ on railでは、どのようにコンテンツ転送エンコーディングbase64 Mailオブジェクトをデコードしますか?

ほとんどすべての着信メールを処理できますが、英語のアクセント記号が付いた国際的なメールに遭遇することがあります。これらのメールの本文をSTDOUTに表示すると、デコードが間違っていると思われるため、以下のようなランダムな文字が表示されます...

これは、画面に印刷するときのメールオブジェクトの本文です。

"PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0i 
ZW4tdXMiPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s 
OyBjaGFyc2V0PVVURi04Ij48bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1pY3Jvc29m 
dCBGcm9udFBhZ2UgNC4wIj48bWV0YSBuYW1lPSJQcm9nSWQiIGNvbnRlbnQ9IkZyb250UGFnZS5F 
ZGl0b3IuRG9jdW1lbnQiPjx0aXRsZT5OZXcgUGFnZSAxPC90aXRsZT48L2hlYWQ+PGJvZHk+PHRh 
YmxlPjx0cj48dGQ+PHA+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPSJibGFjayIgc2l6ZT0iMSI+ 
PGI+Q29udGV1ZG8gZW52aWFkbyBkbyBtZXUgQ2VsdWxhciBWaXZvPC9iPjwvZm9udD48L3A+PC90 
ZD48L3RyPjx0YWJsZSBib3JkZXI9MD48dHI+PHRkIGNvbHNwYW49MT48aHIgY29sb3I9IjgxODFE 
QiI+PC90ZD48L3RyPjx0cj4KPHRyPjx0ZCBjb2xzcGFuPTEgYWxpZ249IkNlbnRlciI+PGZvbnQg 
ZmFjZT0iQXJpYWwiIGNvbG9yPSJibGFjayIgc2l6ZT0iMyI+I3IgZm9jbyBkZSBkZW5ndWUgI24g 
YnJhc2lsICNzIHNwICNjIHPDo28gcGF1bG8gI2EgcnVhIG1hcmFuaMOjbyBjb20gcnVhIGFyYWNh 
anU8L2ZvbnQ+PC90ZD48L3RyPgo8L3RyPjx0cj4KPHRkIGNvbHNwYW49MT4KPGhyIGNvbG9yPSI4 
MTgxREIiPgo8L3RkPgo8L3RyPgo8L3RhYmxlPgo8L3RhYmxlPgo8L2JvZHk+CjwvaHRtbD4=" 

これらの国際郵便には、7bitではなく、Content-Transfer-Encoding:base64があります。それで私はメールを正しく解読できるようにするために何をする必要がありますか?私はBase64.decode64のようなものを試しましたが、アンパックメソッドが定義されていないと不平を言っています。

私は運がないカップルの時間のためにこれに取り組んできました。誰でも私を助けてくれますか?

あなたはBase64.decodeに提供パラメータが文字列でないように見えます

答えて

1

ありがとうございます。 ruby-docから

decodeのでString.unpackにフォールバック):

def decode64(str) 
    str.unpack("m").first 
end 
2

は、少なくとも、今日actionmailerのが正しく、それらの電子メールを復号することができます。 これが動作するはずです:

message = Mail.new(encoded_body) 
message.html_part.body.decoded 
関連する問題