我发现这个link关于如何在asp.net中使用Razor Engine进行电子邮件模板,它运行得很好。但我试图在电子邮件模板中添加带有图像的徽标。
这样的事情:
EmailTemplate.cshtml
(顺便说一句是强类型视图)
<html>
<body>
<img src="logo.jpg" />
</body>
</html>
当我尝试在电子邮件中提交它时,似乎没有读取图像路径,它只在内容中呈现X.
我正在考虑将图像路径作为模型的一部分传递,但它似乎很奇怪。有没有办法实现这个目标?
非常感谢任何帮助。感谢
答案 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)
。