有人能指出我的问题吗?
我在rails 3.1应用程序邮件程序中使用内联附件。该信还包含存储在amazon w3服务器上的图像。
问题是gmail没有正确显示字母。我在信中有内联附件。但Gmail会将这些文件显示为附加文件。这封信还包含一个附加的html页面,其中包含字母本身。 所有gmail显示都是一组符号,我想这是一个附加图像的base64版本。
请参阅屏幕截图。
由于缺少必要的评分,我无法发布图片,因此我发布了here。
以下是我的邮件中的代码:
attachments.inline['blank'] = File.read("#{Rails.root.to_s + '/app/assets/images/blank_500x500.png'}")
attachments.inline['discount-deal-triangle'] = File.read("#{Rails.root.to_s + '/app/assets/images/discount-deal-triangle.png'}")
mail(:to => @subscriber.email, :subject => subject)
以下是视图文件中的代码:
-if @image_url
= image_tag( attachments['offer_image'].url, :id => 'offer_image', :width => "320", :height => "320")
-elsif @offer.image.nil?
= image_tag( attachments['blank'].url, :id => 'offer_image', :width => "320", :height => "320")
我省略了细节以使其更简单。
我做错了什么?
答案 0 :(得分:11)
毕竟我找到了一个解决方案:你需要做的就是设置附件的mime类型和编码。
attachments.inline['blank'] = {
:data => File.read("#{Rails.root.to_s + '/app/assets/images/blank_500x500.png'}"),
:mime_type => "image/png",
:encoding => "base64"
}
attachments.inline['discount-deal-triangle'] = {
:data => File.read("#{Rails.root.to_s + '/app/assets/images/discount-deal-triangle.png'}"),
:mime_type => "image/png",
:encoding => "base64"
}
这对我有用。
答案 1 :(得分:5)
在内联数组中使用文件扩展名。例如:
attachments.inline['blank.png'] =
File.read(Rails.root.join('app', 'assets', 'images', 'blank_500x500.png')
这样Rails会猜测文件mime_type
和encoding
。至少Rails 4.2会这样做。
你也可以参考https://stackoverflow.com/a/25810153/2041318,你可以在那里找到邮件内嵌图像的好帮手方法。
答案 2 :(得分:0)
值得一提的是,当我发现这个问题时,我的问题是相同的,但却有不同的根本原因。
如果您正在运行Rails 4并且在Gmail中显示图像时出现问题(但不在Outlook365或OSX邮件程序客户端中),请确保您不会尝试显示.svg
文件。 Gmail不支持这些日期我写这篇文章并且您需要.jpg
或.png
后备。
答案 3 :(得分:0)
这实际上取决于图像的大小,它被认为是适当的附件(而不是嵌入式附件),例如以gmail生成链接和缩略图以下载。
>我所做的就是@roman推荐的所有内容,并且调整了徽标的大小以使其大小小于10kb 。结果是没有附件的干净电子邮件,邮件中显示了我的徽标。