Mandrill Mailchimp 如何在电子邮件正文中嵌入图像

Posted

技术标签:

【中文标题】Mandrill Mailchimp 如何在电子邮件正文中嵌入图像【英文标题】:Mandrill Mailchimp how to embed an image in email body 【发布时间】:2013-08-31 09:33:51 【问题描述】:

我想在电子邮件页脚中嵌入图像。我以前使用“LinkedResources”通过 .NET 邮件客户端执行此操作。 (mailObject.AlternateViews.Add(footerImageLinkedResource);)

但是 Mandrill api 没有备用视图。

我用 Mandrill 尝试的示例代码如下,

MailChimp.Types.Mandrill.Messages.Message message = new MailChimp.Types.Mandrill.Messages.Message();    
Stream ms = new FileStream(@"C:\sam.jpg", FileMode.Open);
string src = ImageFormatter.GetImageURL(ms);
ms.Close();
message.html = body + "<p><a href=\"" + websiteUrl + "\"><img alt=\"" + websiteUrl + "\" src=\"" + src + "\" /></a></p>";

我怎样才能完成这项任务? (如果 src 是作为 URL 给出的,它可以正常工作,但我想嵌入图像)

【问题讨论】:

【参考方案1】:

当使用 SMTP 发送电子邮件时,“LinkedResources”方法似乎仍然适用于 Mandrill。

如果有人需要在没有 Mandrill API 的情况下添加内联图像,对我来说,它可以使用一些虚拟 html 创建一个替代视图,并将图像添加为链接资源。这是一个sn-p:

string htmlBody = String.Format("<html><body><img src=\"cid:0\" /></body></html>", "myContentId");
AlternateView avHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
LinkedResource inline = new LinkedResource(imageStream, "image/png");
inline.ContentId = "myContentId";
inline.ContentType.MediaType = "image/png";
avHtml.LinkedResources.Add(inline);
emailMessage.AlternateViews.Add(avHtml);

_emailSender.Send(emailMessage);

Mandrill 将忽略我提供的 html 正文,并使用配置的模板。在那个 Mandrill 模板中,我还写了&lt;img src="cid:myContentId" /&gt;,它会将图像作为内联附件发送,并设置 ContentID。 我没有找到任何文档,这只是反复试验。

_emailSender 是 .NET SmtpClient,emailMessage 是 System.Net.Mail.MailMessage。

【讨论】:

【参考方案2】:

您可以按照此页面使用images API 参数:

http://help.mandrill.com/entries/25252978-Tips-for-using-images-in-Mandrill-emails

您需要提供图像名称、base64 编码图像和图像的 mime 类型,然后在电子邮件的 HTML 中通过图像名称引用图像。使用 .NET Mandrill API 包装器 (https://github.com/shawnmclean/Mandrill-dotnet)(未经测试)可能看起来像这样:

List<Mandrill.image> images = new List<Mandrill.image>();
Mandrill.image img = new Mandrill.image();
byte[] fileData = File.ReadAllBytes("C:\sam.jpg")
img.content = Convert.ToBase64String(fileData)
img.type = "image/jpeg"
img.name = "image_name"
images.Add(Image)
Email.images = images //(where Email is a Mandrill.EmailMessage)

然后在您的电子邮件中,您将有这样的代码:

<img src="cid:image_name">

这将按您随电子邮件发送的 ID 显示该图像。

【讨论】:

嗨马丁,我在我的 html 模板中包含了 ,但是当我在 mandrill 出站活动中检查发送的电子邮件时,我发现图像数据没有附加适当地。相反,它只是在 html 中显示 '' 纯文本。任何想法?提前致谢。

以上是关于Mandrill Mailchimp 如何在电子邮件正文中嵌入图像的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 mandrill / mailchimp 事务性电子邮件问题收件人域不匹配

将 Mandrill 帐户合并到 Mailchimp 后,如果我的发送域未设置为接收电子邮件,我该如何接受验证电子邮件?

如何使用 mandrill 发送 mailchimp 模板?

是否可以在没有 Mandrill 的情况下使用 Mailchimp 发送交易电子邮件?

MailChimp (Mandrill) for .NET 为啥电子邮件包含图像?

如何将 MailChimp 设计的活动转换为 Mandrill 中的模板?