我有一个小型应用程序,可以处理从带有 fetchmail 的 imap 服务器下载的电子邮件。该处理包括查找带有 XML 文件的 base64 编码附件。
这是代码(有些剥离):
def extract_data_from_mailfile(mailfile)
begin
mail = TMail::Mail.load(mailfile)
rescue
return nil
end
bodies_found = []
if mail.multipart? then
mail.parts.each do |m|
bodies_found << m.body
end
end
## Let's parse the parts we found in the mail to see if one of them
## looks XML-ish. Hacky but works for now.
## was XML.
bodies_found.each do |body|
if body =~ /^<\?XML /i then
return body
end
end
return nil # Nothing found.
end
这很好用,但在大型 XML 文件(通常 >600k 邮件文件)上,这会中断。
>> mail.parts[1].body.size
=> 487424 <-- should have been larger - doesn't include the end of the file
Base64 解码也不会自动发生。但这是当我尝试手动运行解码时:
>> Base64::decode64(mail.parts[1].body)
[...] ll="SMTP"></Sendt><Sendt"
这是 XML 文件的一部分,但已被剪裁。
有什么办法可以得到整个附件?有小费吗?