2012-04-17 73 views
2

我不确定为什么通过ActionMailer发送带有附件的电子邮件不会显示附件,而只是将附件的内容显示/输出到电子邮件中。ActionMailer无法附加HTML文件

class MyMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def test_email() 
    attachments['testresult1.html'] = { 
     :filename => 'testresult1.html', 
     :body => File.read('C:\\testresult1.html') 
    } 

    mail(:to => '[email protected]', 
    :subject => 'Cool great message' 
) 
    end 
end 

电子邮件的输出看起来像HTML文件/附件的这个

Date: Tue, 17 Apr 2012 14:11:52 +1000 
Mime-Version: 1.0 
Content-Type: text/html; 
charset=UTF-8; 
filename=testresult1.html 
Content-Transfer-Encoding: 7bit 
Content-Disposition: attachment; 
filename=testresult1.html 
filename: testresult1.html 
Content-ID: <[email protected]> 

然后整个内容。

我希望HTML文件附加到电子邮件,因为它会附加到一个普通的电子邮件,我应该能够双击附件并在浏览器中打开它。

Email Client = Microsoft Outlook 
Connection = SMTP 
Rails = 3.2.1 
ActionMailer = 3.2.1 
Mail = 2.4.4 

回答

2

您应该尝试向#mail添加body密钥。

+0

你好谢谢,这工作。你能解释一下,为什么它的工作.. ?? – user1126946 2012-04-17 23:19:41

+1

以我的经验,一个ActionMailer电子邮件有一个附件和没有正文成为一个混乱的标题和内容。我想这应该写成差的测试覆盖率(他们的测试似乎假设总是有一个身体)。 – 2012-04-18 17:53:37

+0

啊,我同意并且非常有道理。看起来像Ruby社区必须提出的错误。感谢您的答复。 – user1126946 2012-04-18 22:59:51

2

非常感谢菲利普:)

我没有任何身体属性 我面临以下两个问题发送附件:

  1. PDF的名字总是来为“NONAME”
  2. 有时PDF被损坏

但添加到邮件的身体属性后,它的工作原理。

所以,正确的语法是:

attachments['mypdf.pdf'] = File.read('#{Rails.root.to_s}/public/test.pdf') 
mail(:to => guru****@gmail.com, :from => guru****@gmail.com, :subject => 'Attachment Test Mail', :body => 'Regards, Guru') 

1

我有同样的问题为 'NONAME' 和破坏。

我使用下面的代码:

attachments['126539_statistics.pdf'] = File.read("app/assets/pdfs/126539_statistics.pdf") 
mail(:to => email, :subject => subject, :body => message) 

否带附件发送邮件的任何问题......