Чтение электронной почты с использованием ruby-mail не возвращает тело письма в текстовом формате.

Я использую ruby-mail, чтобы прочитать письмо.

Все, что я получаю в правильном читаемом формате, кроме тела письма.

Тело письма выглядит как какой-то другой формат кодировки.

Мой код:

Mail.defaults do
  retriever_method :pop3, :address    => "some.email.com",
              :port       => 995,
              :user_name  => 'domain/username',
              :password   => 'pwd',
              :enable_ssl => true
end


puts "From"
puts mail.from
puts "Sender:"
puts mail.sender
puts "To:"
puts mail.to              
puts "CC:"
puts mail.cc              
puts "Subject:"
puts mail.subject         
puts "Date:"
puts mail.date.to_s       
puts "MessageID:"
puts mail.message_id      
puts "Body:"
#puts mail.body

Выход:

Из legalholdnotification123@emc.com

Отправитель:

To: bhavesh.sharma@emc.com

CC:

Тема: case4: Уведомление о правовом удержании

Дата: 2012-04-24T14: 46: 25-04: 00

ID сообщения: 3298720.1335293185423.JavaMail.root@vm-bhaveshok7

Тело:

Дата: сб, 05 мая 2012 г. 09:45:08 -0700 MIME-версия: 1.0 Тип контента: текст / обычный текст; charset = utf-8 Content-Transfer-Encoding: base64 Content-ID: <4fa559147a120_138455aab4289ac@USITHEBBASL2C.mail>

SGVsbG8gU2lyL01hZGFtLA0KDQpCcmllZiBpbnRyb2R1Y3Rpb24gdG8gdGhl IGNhc2UgY2FzZTQNCg0KV2UgaGF2ZSBpZGVudGlmaWVkIHlvdSBhcyBhIHBl cnNvbiB3aG8gbWF5IGhhdmUgImRvY3VtZW50cyIgLS0gd2hpY2ggaW5jbHVk ZXMgYm90aCBwaHlzaWNhbCBhbmQgZWxlY3Ryb25pYyBkb2N1bWVudHMgLS0g dGhhdCBhcmUgcmVsYXRlZCB0byB0aGlzIG1hdHRlci4gV2UgYXJlIGltcGxl bWVudGluZyBhIG1hbmRhdG9yeSBkb2N1bWVudCByZXRlbnRpb24gcG9saWN5 IHRvIHByZXNlcnZlIHRoZXNlIGRvY3VtZW50cy4gUGxlYXNlIGNhcmVmdWxs eSByZXZpZXcgdGhpcyBtZW1vcmFuZHVtIGFuZCBzdHJpY3RseSBhZGhlcmUg dG8gdGhlIG1hbmRhdG9yeSBkb2N1bWVudCByZXRlbnRpb24gcG9saWN5IG91 dGxpbmVkIGhlcmVpbi4gW0NvbXBhbnldIGNvdWxkIGJlIHN1YmplY3QgdG8g

Так что я не могу прочитать тело письма.

Что нужно сделать, чтобы я мог читать почту, мне нужно извлечь текст из тела и использовать ссылку, которая присутствует внутри тела письма.

Bhavesh

2 ответа

Почтовый камень не декодирует тело автоматически. Ты можешь использовать:

mail.message.body.decoded

получить расшифрованное тело сообщения. Кроме того, вы можете обнаружить, что хотите получить доступ к обычным HTML-частям сообщения. Для этого вы можете использовать что-то вроде следующего:

plain_part = message.text_part ? message.text_part.body.decoded : nil
html_part = message.html_part ? message.html_part.body.decoded : nil

Затем вы можете использовать message.body.decoded как запасной вариант, если эти части не существуют.

Добавьте гем почты и просто используйте формат тела письма с mail.parts[1].body.decoded

Я использовал:

[...]

ids = imap.search(['UNSEEN'])

ids.each do |msg_id|
  raw_msg = imap.fetch(msg_id,'RFC822').first.attr['RFC822']
  msg = Mail.read_from_string raw_msg
  msg_body_content = msg.multipart?? msg.text_part.body.decoded : message.html_part.body.decoded
end
Другие вопросы по тегам