生产中未显示的内联电子邮件图像

时间:2017-10-27 23:58:58

标签: ruby-on-rails ruby-on-rails-5

我通过动作邮件发送html电子邮件,发生了一些奇怪的事情:内联图片确实出现在从生产部署发送的电子邮件中,但没有出现在本地开发中。

professionnel_mailer.rb

class ProfessionnelMailer < ApplicationMailer

    layout 'professionnelmailer'

    def notification(professionnel)
        attachments.inline['image200.png'] = File.read("#{Rails.root}/app/assets/images/image200.png")
        @professionnel = professionnel
        mail(to: @professionnel.email, subject: "You have received a notification !")
    end    
end

notification.html.erb

<%= image_tag(attachments['image200.png'].url)%>
<h1>Hello <%= @professionnel.first_name %> !</h1>

当然image200.png存在于本地和远程。在这两种情况下都会收到电子邮件,然后我的Amazon AWS SES设置在两种环境中都是正确的。不太确定它在哪里中断..

4 个答案:

答案 0 :(得分:0)

对于Rails&gt; = 4.2来预览图像,您应该创建初始值设定项:

# config/initializer/preview_interceptors.rb
ActionMailer::Base.register_preview_interceptor(ActionMailer::InlinePreviewInterceptor)

答案 1 :(得分:0)

基本上,这些图片处于开发模式时会有localhost:3000个网址,而生产时会有服务器的IP或域名。

要解决此问题,并且因为您正在使用Amazon SES,请将所需图像添加到S3存储桶,并直接在电子邮件中读取该存储桶中的图像,

这将帮助您查看图像,无论是开发还是生产。

答案 2 :(得分:0)

正如您在上面的评论中所说,您的base64字符串为空,我认为缺少部分尝试将其包含在您的代码中,使用this website将您的图片转换为base64,如下所示

<img height="240" width="240" src="data:your_image/png;base64,/* your converted base64-string */" />

试试这个。

答案 3 :(得分:0)

我的程序遇到了同样的问题。我通过使用另一种方法克服了这个问题。我将发送我已转换的示例代码。

这是我的旧代码:

System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
String UserName = "xyz@someorg.com";
String Password = "my password";
Message.To.Add(new System.Net.Mail.MailAddress("toaddress@toadddress.com"));
Message.From = new  
System.Net.Mail.MailAddress("fromaddress@fromaddress.com");              
Message.Subject = "test subject";
Message.Body = "<img src=@'C:\\Sunset.jpg'/>";                
Message.IsBodyHtml = true;
System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient();
smtpClient.Host = "hostname";
smtpClient.Port = 25;
smtpClient.Credentials = new 
System.Net.NetworkCredential(UserName,Password);
smtpClient.Send(message);

这是我的新代码:

string attachmentPath = Environment.CurrentDirectory + @"\test.png";
Attachment inline = new Attachment(attachmentPath);
inline.ContentDisposition.Inline = true;
inline.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
inline.ContentId = contentID;
inline.ContentType.MediaType = "image/png";
inline.ContentType.Name = Path.GetFileName(attachmentPath);

message.Attachments.Add(inline);

我认为这可能会对你有帮助。

参考:http://www.systemnetmail.com/faq/4.4.aspx