当我尝试从我的IMAP帐户中读取一些电子邮件时:
imap.search(['NOT','SEEN']).each do |message_id|
mail = imap.fetch(message_id, "BODY[1]")
end
我得到各种各样的ascii?我的字符串中的代码,例如= 20 = 93 = 94等。 尝试转换或解码很多东西,但没有成功。我怎样才能摆脱这些代码?
答案 0 :(得分:3)
对邮件正文进行编码有许多不同的选项,例如quoted-printable,base-64等。 Ruby中最简单的方法是将整个消息传递给邮件gem,让它进行解析,然后输出纯文本内容。
message = Mail.new(raw_source)
puts message.body.decoded
根据经验,您实际上可能会发现需要执行以下操作:
message.multipart? ? (message.text_part ? message.text_part.body.decoded : nil) : message.body.decoded
当我们将消息发送到CloudMailin中的应用程序时,我们使用与此类似的内容,以确保我们找到普通部分,因为它并不总是保证普通部分将在正文中而不是mime编码。
答案 1 :(得分:1)
我必须使用以下内容来解析电子邮件。
text = message.multipart? ? (message.text_part ? message.text_part.body.decoded : message.html_part.body.decoded) : message.body.decoded
我解析的其中一条消息根本不包含text_part,所以在这种情况下放一个nil将不起作用。
答案 2 :(得分:0)
听起来你找到了Quoted-printable身体。您应该查找正文的编码,并相应地解析它。好像Net::IMAP::BodyTypeBasic可以给你这些信息,但我恐怕我不知道足够的红宝石可以让你更进一步。