Чтение электронной почты с использованием 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