我找到了这个 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/