使用ActionMailer::Base在Rails 3.0中以一两行代码发送带附件的邮件。

6
这是我的第一个问题,但我想做的是在rails控制台中发送带附件的邮件,只使用一两行代码。我不想像这样实例化一个类:
``` class Mailer < ActionMailer::Base ... end ```
我想尝试这种方式:
m=ActionMailer::Base.mail(:to => "harry@example.com", :from => "test@example.com", :subject=>"test from zip", :content_type=>"multipart/mixed")
m.attachments['file.zip']={:mime_type => "application/zip", :data=>File.read("#{Rails.root}/tmp/test.zip")}
m.deliver

这将会发送一封电子邮件,但是附件名为"noname",无法解压缩。似乎它没有正确解析附件的数据。如果我查看原始邮件,附件内容看起来是这样的:

--
Date: Tue, 06 Mar 2012 06:59:42 -0800
Mime-Version: 1.0
Content-Type: application/zip;
charset=UTF-8
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=file.zip
Content-ID: <4f56264f16e82_498a46e93467093@ip-10-125-15-127.mail>

UEsDBBQAAAAIAE9iZUBSMYOwkKgZANRakgAQABUAbG9hbl9kZXRhaWxzLmNz
dlVUCQADlh9VT0QfVU9VeAQA6APoA8xdW3PiuLZ+37+Ch6ldZ1dZGUvyNW/c
EwKBQLiENze4gytgZ9tmMplff5YMlgQWmV1tk5qufiAkwV8trcu3bko/8sLa
m/+p9dmLJPXSfaI1oyR4Df21Non28crPvt+MfS/117Uo5C+9VKu/v8fRH4e3
O0HobWte9g68gHdaQfJjHyeHb4/9/+79JPu9XbQPU22y2kTRVuv74dqPa7G/
...

1)如果没有使用像pony gem这样的工具,是否有可能发送带附件的电子邮件?


你解决了你的问题吗?我也有同样的问题... - BvuRVKyUVlViVIc7
抱歉刚看到这个评论,不,我从未让它工作过,最终我只是在控制台中创建了一个类(class MyMailer < ActionMailer::Base; etc... ; end)并以此方式进行附加。这是一个有趣的问题,我想知道现在是否能找到更好的解决方法。 - harrya
1个回答

2

为什么它不起作用的估计

根据SO帖子Invalid filename in email (ActionMailer),似乎是ActionMailer想要自动从文件中获取信息,而控制台无法提供此类信息。

我注意到以下代码虽然有点混乱,但在控制台上可以正常工作(对于我的目的来说足够了):

File.open("magical_elephant_potato.txt", 'w') {|f| f.write("Heyyyy youuu!") }
m=ActionMailer::Base.mail(:to => "rainbowpony@company.com", :from => "noreply@railsapp.com", :subject=>"Behold my MEP attache", :content_type=>"multipart/mixed")
m.attachments['magical_elephant_potato.txt']=File.read("magical_elephant_potato.txt")
m.deliver
FileUtils.rm('magical_elephant_potato.txt')

鉴于通过控制台编写和删除文件可以正常工作,也许可以编写、使用然后删除ActionMailer所需的文件?但是我们正在进入棘手的解决方法领域。问题在于ActionMailer将寻找适当的邮件发送程序视图,但我们如何告诉ActionMailer在哪里查找邮件发送程序文件(即文件名)?
至于信息未正确编码的问题,我认为问题在于它被包装在“noname”文件中并带有一些头信息。数据可能完好无损,就像我的示例一样,我得到了:
--
Date: Tue, 08 Jan 2013 11:08:57 +0000
Mime-Version: 1.0
Content-Type: text/plain;
 charset=UTF-8;
 filename=magical_elephant_potato.txt
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename=magical_elephant_potato.txt
Content-ID: <50bbfe4898ac_6d7febf6a312062@ws9.companydev.com.mail>

Heyyyy youuu!

----

当我使用文本编辑器打开“noname”时。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接