我通过动作邮件发送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设置在两种环境中都是正确的。不太确定它在哪里中断..
答案 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);
我认为这可能会对你有帮助。