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

Boy*_*smo 6 .net c# asp.net asp.net-mvc razor

我已经找到了关于如何在asp.net中使用Razor Engine用于电子邮件模板的链接,并且它运行良好.但我试图在电子邮件模板中添加带有图像的徽标.

像这样的东西:

EmailTemplate.cshtml (顺便说一下这是一个强类型的视图)

<html>
<body>
  <img src="logo.jpg" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助将非常感激.谢谢

Rez*_*aei 9

要查看到处的图像,您可以使用以下选项:

绝对网址

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

IMO这是最简单的选项,推荐用于您的问题.

附件

正如梅森在评论中提到的你可以将图像附加到邮件,然后放置图像标签和使用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);
Run Code Online (Sandbox Code Playgroud)

数据Uri

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

不推荐,因为在大多数的邮件客户端的疲软支持,我测试了它Outlook.com(web)OutlookWebAccess(web)Office Outlook(Windows)Outlook(windows 8.1),不幸的是它只能在工作OutlookWebAccess(web).