我想在电子邮件页脚中嵌入图片。我以前使用“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给出,它可以正常工作,但我想嵌入图像)
答案 0 :(得分: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显示该图像。
答案 1 :(得分:0)
使用SMTP发送电子邮件时,“LinkedResources”方法似乎仍适用于Mandrill。
如果有人需要在没有Mandrill API的情况下添加内嵌图像,对我来说,它可以创建一个带有一些虚拟html的视图,并将图像添加为链接资源。这是一个片段:
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模板中,我还写了<img src="cid:myContentId" />
,它将图像作为内联附件发送,并设置了ContentID。
我没有找到任何相关的文档,只是反复试验。
_emailSender是.NET SmtpClient,而emailMessage是System.Net.Mail.MailMessage。