2011-09-20 1 views
0

Я работаю над рубином на рельсах ActionMailer. Что я сделал, так это то, что у меня был фоновый процесс, опросив мой аккаунт gmail, и я получаю почту с помощью протокола «RFC822». Затем я отправляю эти письма методу получения внутри моего класса ActionMailer.В рубине на рельсах, как вы декодируете base-encoding base64 Почтовый объект

Хотя я могу успешно обрабатывать почти все входящие письма, иногда я встречаю международные письма, которые имеют знаки акцента в английских символах. При отображении тел этих писем в 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=" 

Эти международные письма имеют Content-Transfer-Encoding: base64 в отличие от 7 бит. Итак, что мне нужно сделать, чтобы я мог правильно декодировать электронную почту? Я пробовал такие вещи, как Base64.decode64, но он жалуется, что не существует метода распаковки.

Я работаю над этим в течение нескольких часов без везения. Может ли кто-нибудь помочь мне?

Спасибо

ответ

1

Похоже параметра вы предоставляете Base64.decode не является строкой. (Потому что decode возвращается к String.unpack)

От ruby-doc:

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

По крайней мере, в настоящее время ActionMailer способен правильно декодировать эти сообщения. Должно работать:

message = Mail.new(encoded_body) 
message.html_part.body.decoded 

 Смежные вопросы

  • Нет связанных вопросов^_^