Rails 3.0.7 ActionMailer附件问题

时间:2011-05-24 04:04:00

标签: ruby-on-rails attachment actionmailer

我正在尝试将文件附加到外发电子邮件,但附件大小最终为1个字节。无论我转发什么附件,它总是以1字节的大小(腐败)结束。其他一切看起来都不错。

电子邮件信息从IMAP帐户中提取并存储在数据库中以供浏览。附件存储在文件系统中,其文件名存储为电子邮件的关联记录。

在视图中,可以选择将电子邮件转发给其他收件人。它在Rails 2.3.8中有效,但对于Rails 3,我必须更改方法的附件部分,所以现在它看起来像......

def forward_email(email_id, from_address, to_address)
    @email = Email.find(email_id)
    @recipients = to_address
    @from = from_address
    @subject = @email.subject
    @sent_on = Time.now
    @body = @email.body + "\n\n"

    @email.attachments.each do |file|
      if File.exist?(file.full_path)
        attachment :filename => file.file_name, :body => File.read(file.full_path)
      else
        @body += "ATTACHMENT NOT FOUND: #{file.file_name}\n\n"
      end
    end
end

我也试过......

attachments[file.file_name] = File.read(file.full_path)

并添加:mime_type和:content_type无效。

任何帮助都会受到赞赏。

谢谢!

3 个答案:

答案 0 :(得分:1)

这是我为我尝试和工作的原因

 attachments.each do |file|
      attachment :content_type => MIME::Types.type_for(file.path).first.content_type, :body => File.read(file.path) 
 end

答案 1 :(得分:0)

文件是否可读?您可以通过放置这样的东西来调试问题吗?

logger.debug "File: #{file.full_path.inspect} : #{File.read(file.full_path).inspect[0..100]}"

您的development.log中有什么内容吗?

答案 2 :(得分:0)

好吧,来自rails团队的人回答了我的问题。问题在于添加除方法内部附件之外的正文内容(@body)。如果您要附加文件,则必须使用视图模板。