В ruby ​​on rails как вы декодируете контент-кодировку передачи содержимого base64 Mail - PullRequest
0 голосов
/ 20 сентября 2011

Я работаю над ruby ​​на рельсах ActionMailer. Что я сделал, так это то, что у меня был фоновый процесс, опрашивающий мою учетную запись gmail, и я получаю почту по протоколу RFC822. Затем я отправляю эти письма методу получения внутри моего класса ActionMailer.

Несмотря на то, что я могу успешно обрабатывать почти все входящие письма, иногда я сталкиваюсь с международными письмами, которые имеют английские символы ударения. При отображении тел этих писем в 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, а не 7bit. Итак, что мне нужно сделать, чтобы я мог правильно декодировать электронную почту? Я пробовал такие вещи, как Base64.decode64, но он жалуется, что не определен метод распаковки.

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 июня 2016

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

message = Mail.new(encoded_body)
message.html_part.body.decoded
1 голос
/ 20 сентября 2011

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

С ruby-doc :

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