Rails中base64编码的image_tag

4

有没有办法让Rails 3.1中的image_tag将图像转换为base64格式,以便将其发送到电子邮件中。

如果没有这样的方法,是否有人可以告诉我如何发送包含存储在服务器端的图像的电子邮件?如果只使用image_tag来渲染图像,则图像不会在电子邮件中显示。

2个回答

3
要在电子邮件中发送图片,请使用邮件的附件属性将文件与邮件一起发送:
attachments['logo.png'] = File.read(Rails.public_path + '/images/logo.png')

这个文件将作为附件随邮件发送。如果要在电子邮件正文中使用此图像,请使用attachments.inline [],然后在模板中使用 image_tag attachments [].url

此外请注意,Rails 3存在与内联附件有关的问题。由于这个问题,所有普通附件在主要电子邮件客户端(如Thunderbird或Outlook)中都不可见。


这是否意味着如果某些图像存储在亚马逊W3服务器中,它们将无法显示在电子邮件中? - roman
不,只有在这种情况下,您才应该将此文件获取到服务器以进行附加。例如,使用Paperclip请参见答案 - Mark Huk
我正在尝试像这样附加文件:@attachments = {} @attachments['blank'] = File.read("#{Rails.root + '/app/assets/images/logo.png'}")但是我遇到了这样的错误: NoMethodError: undefined method inline' for #Hash:0x1051c86c from (pry):55:in daily_email'出了什么问题? - roman
不需要定义attachments,因为这是ActionMailer::Base上的一个方法。只需使用attachments而不需要@和初始化。 - Mark Huk

2
在邮件程序中,您可以添加内联附件,然后可以在邮件的HTML中使用它们: 例如,您有一个名为send_mail(user)的邮件程序操作。
 def send_mail(user)
   attachments.inline['logo.gif'] = File.read("#{Rails.root}/public/logo.gif")
   mail( :to=>"#{user.name} #{user.last_name} <#{user.email}>", :subject => "Payment received")
 end 

然后在邮件视图中:发送邮件的文件send_mail.html

 <center> <%= image_tag attachments['logo.gif'].url, :alt => "Our logo" -%> </center>

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