我正在使用Ruby Mail gem尝试阅读和解析电子邮件。我遇到了与this post类似的问题,但提供的解决方案只解决了我的一半问题......
有些电子邮件不响应html_part
或text_part
,但它们仍被视为“多部分”。没关系,我会手动查看MIME类型。但是,有多部分消息没有任何部分!
我收到了message.multipart? #=> true
,但message.parts.length #=> 0
的消息。因此,我实际上无法提取单个部分:(。
如果我查看message.body
(或message.body.decoded
),则会显示文字,类型为text/html
。但是,它也包含顶部的所有标题信息。
这听起来很疯狂,但是如何才能获得没有任何部分的“多部分”电子邮件的正文(或标题)呢?
以下是其中一条消息:
#<Mail::Message:70280791538440, Multipart: true, Headers: ...>
使用message.body
:
--XX-2ba4f992ec6d5e224ebeaf78eac50df5\nContent-type: text/html; charset=\"UTF-8\" \nContent-Transfer-Encoding: 7bit \n\nThank you...
答案 0 :(得分:3)
是的,这是因为真实世界的电子邮件有各种不符合协议的惊喜。
获取标题部分和正文部分:
header_part, body_part = message.body.split(/\n\s*\n/m, 2)
您可以在此文件中找到一些有用的解析模式:
lib/mail/patterns.rb