如何使用razor引擎进行图像src的电子邮件模板化

时间:2015-09-24 17:17:57

标签: c# asp.net .net asp.net-mvc razor

我发现这个link关于如何在asp.net中使用Razor Engine进行电子邮件模板,它运行得很好。但我试图在电子邮件模板中添加带有图像的徽标。

这样的事情:

EmailTemplate.cshtml(顺便说一句是强类型视图)

<html>
<body>
  <img src="logo.jpg" />
</body>
</html>

当我尝试在电子邮件中提交它时,似乎没有读取图像路径,它只在内容中呈现X.

我正在考虑将图像路径作为模型的一部分传递,但它似乎很奇怪。有没有办法实现这个目标?

非常感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:9)

要在任何地方看到图像,您可以使用以下选项:

绝对网址

您可以简单地使用完整的图像绝对路径,例如"http://example.com/images/logo.png"

IMO这是最简单的选项,建议您解决问题。

附件

正如Mason在评论中所提到的那样您可以将图像附加到邮件中,然后添加图像标记并使用附件的ContentId

//(Thanks to Mason for comment and Thanks to  Bartosz Kosarzyck for sample code)
string subject = "Subject";
string body = @"<img src=""$CONTENTID$""/> <br/> Some Content";

MailMessage mail = new MailMessage();
mail.From = new MailAddress("from@example.com");
mail.To.Add(new MailAddress("to@example.com"));
mail.Subject = subject;
mail.Body = body;
mail.Priority = MailPriority.Normal;

string contentID = Guid.NewGuid().ToString().Replace("-", "");
body = body.Replace("$CONTENTID$", "cid:" + contentID);

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(body, null, "text/html");
//path of image or stream
LinkedResource imagelink = new LinkedResource(@"C:\Users\R.Aghaei\Desktop\outlook.png", "image/png");
imagelink.ContentId = contentID;
imagelink.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
htmlView.LinkedResources.Add(imagelink);
mail.AlternateViews.Add(htmlView);

SmtpClient client = new SmtpClient();
client.Host = "mail.example.com";
client.Credentials = new NetworkCredential("from@example.com", "password");
client.Send(mail);

数据Uri

你可以使用数据uri(data:image / png; base64,....)。

不推荐由于大多数邮件客户端支持不足,我使用Outlook.com(web)OutlookWebAccess(web)以及Office Outlook(Windows)Outlook(windows 8.1)进行了测试不幸的是,它仅适用于OutlookWebAccess(web)