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

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

我找到了这个 link关于如何在 asp.net 中将 Razor Engine 用于电子邮件模板并且效果很好。但我已尝试在电子邮件模板中添加带有图像的 Logo 。

像这样:

EmailTemplate.cshtml(顺便说一句,这是一个强类型 View )

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

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

我正在考虑将图像路径作为模型的一部分传递,但这种方式似乎很奇怪。有什么办法可以实现吗?

任何帮助将不胜感激。谢谢

最佳答案

要在任何地方查看图像,您可以使用这些选项:

绝对网址

您可以简单地使用图像的完整绝对路径,例如 "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)

关于c# - 如何使用 razor 引擎使用图像 src 进行电子邮件模板化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32767314/

相关文章:

c# - WCF新手问题: Calling Methods from JavaScript

.net - 嵌入式非关系 (nosql) 数据存储

c# - 通过一次传递存储数组 block 的总和

c# - 如何使用AxosoftAPI.NET Winforms检查用户是否已成功登录Axosoft

c# - 为什么要使用基类型声明方法参数?

.net - DCOM 服务器和客户端都用 .NET 编写

c# - 为什么我的进程的 Exited 方法没有被调用?

c# - 为什么将整数分配给双重附加属性会出错?

javascript - 如何在代码隐藏中用 C# 编写 JavaScript 函数?

c# - 我可以获得 HttpGet 设置的操作别名以包含同名的 css 文件吗?