2012-04-02 65 views
0

我正在使用cloudmailin接收发送到特定地址的电子邮件。我正在尝试一个简单的场景,我用Mail.app发送一封附件。当我在应用程序中收到帖子时,我创建了一个邮件对象。Rails 3阅读带有Apple Mail.app附件的电子邮件

当我创建邮件对象时,附件是空的。

mail_str = 
"Received: (qmail 16453 invoked from network); 2 Apr 2012 14:27:29 -0000\r\nReceived: from unknown (71.170.102.226)\r\n by smtpauth20.prod.mesa1.secureserver.net (64.202.165.36) with ESMTP; 02 Apr 2012 14:27:29 -0000\r\nFrom: Jake Dempsey <[email protected]>\r\nContent-Type: multipart/mixed; boundary=\"Apple-Mail=_8E1F0992-1DAA-409B-BC73-74747FFDFA98\"\r\nSubject: inv\r\nDate: Mon, 2 Apr 2012 09:27:28 -0500\r\nMessage-Id: <[email protected]>\r\nTo: [email protected]\r\nMime-Version: 1.0 (Apple Message framework v1257)\r\nX-Mailer: Apple Mail (2.1257)\r\n\r\n\r\n--Apple-Mail=_8E1F0992-1DAA-409B-BC73-74747FFDFA98\r\nContent-Disposition: attachment;\r\nfilename=test.csv\r\nContent-Type: text/csv;\r\nname=\"test.csv\"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\nRemove Itesm,Item ID,Short Desc,Long Desc,Segment,Item =\r\nClass,Cost,MSRP,Stock UOM, Unit Vol,Unit Weight,Unit Height,Unit =\r\nLength,Unit Width=0Dno,1, super short, super long long, Casual, =\r\nCasual,1,3,Each, , , , , =0Dno,2, super short, super long long, Casual, =\r\nCasual,1,3,Each, , , , , =0Dno,3, super short, super long long, Casual, =\r\nCasual,1,3,Each, , , , , =0Dno,4, super short, super long long, Casual, =\r\nCasual,1,3,Each, , , , , =0Dno,5, super short, super long long, Casual, =\r\nCasual,1,3,Each, , , , , =0Dno,6, super short, super long long, Casual, =\r\nCasual,1,3,Each, , , , , =0Dno,7, super short, super long long, Casual, =\r\nCasual,1,3,Each, , , , , =0Dno,8, super short, super long long, Casual, =\r\nCasual,1,3,Each, , , , , =0D=\r\n\r\n--Apple-Mail=_8E1F0992-1DAA-409B-BC73-74747FFDFA98--\r\n" 

mail_obj = Mail.new mail_str 
puts mail_obj.attachments.size #should be 1 

如果我通过其他客户端发送一封电子邮件,我可以创造一个mail_obj和附件大小为1

我使用的铁轨3.1.3

回答

1

我们有一些问题,邮件宝石总是找到正确的附件并找到嵌套的附件。最后,我们创建了一个方法来遍历每个消息部分,并递归地提取任何附件。

例如(警告,这不是我们使用,因此它可能不是完美的实际方法)

def parse_attachment(mail, attachments=[]) 
    mail.parts.each do |part| 
    if part.attachment? 
     attachments << part 
    else 
     if part.parts && part.parts.length > 0 
     parse_attachment(part, attachments) 
     end 
    end 
    end 
    return attachments 
end 
+0

史蒂夫,这一点很快就病了测试..给你一个最好的答案,如果它做什么你说..谢谢 – 2012-04-16 20:47:24