我有一个WinForms应用程序,用户可以在其中配置电子邮件模板,以后将邮件与数据库中的客户端数据合并,然后通过SMTP发送。
我的一切工作正常,但问题出现在用户将图像保存在模板体内时。我正在使用DevExpress RichEdit控件来允许用户创建此电子邮件正文,并且该控件将其转换为我用来发送的HTML。当图像存在时,它使用data-uri将图像直接嵌入到HTML中。
当我使用data-uri图像以这种方式发送电子邮件时,问题就出现了,并非所有客户端都正确地呈现它。我只是在Outlook中测试它,它似乎不起作用。我知道一些基于Web的电子邮件客户端可以正常工作,但我需要它一直在工作,至少对于广泛使用的电子邮件客户端。
我想知道其他人是否已经解决了这个问题,这可能是最好的解决方案吗?我想我可以将图像作为附件发送,然后引用附件,虽然我不确定这是否是最佳做法。另一种方法是将每个图像托管在某个服务器上,然后创建一个必须存储图像的服务(如在数据库中),并提供一种使用ID在Web上查询此图像的方法。然后我的电子邮件将使用img src = site / getImg?imgID = xxx类型的东西。然而,这似乎做了很多工作要做我想要完成的事情,我希望我能用更简单的东西来避免它。
提前感谢任何建议!!
答案 0 :(得分:0)
添加图像作为附件将起作用,但是对于您和您的收件人而言,具有更大的有效负载和更高的带宽利用率的缺点。在.net中添加附件的代码非常简单:
var message = new MailMessage();
foreach (string path in attachmentPaths)
{
if (File.Exists(path))
{
message.Attachments.Add(new Attachment(path));
}
}
另一方面,引用存储在网络上的图像会减少电子邮件的大小,并且还可以在请求图像的客户端上收集跟踪数据。当然,大多数电子邮件客户端会先询问用户是否要下载图片,因此您的跟踪工作只会很粗糙。
答案 1 :(得分:0)
您应该尝试将图像保存在本地磁盘中,然后包括嵌入图像的人。
// Add image attachment from local disk
Attachment oAttachment = oMail.AddAttachment( "d:\\test.gif" );
// Specifies the attachment as an embedded image
// contentid can be any string.
string contentID = "test001@host";
oAttachment.ContentID = contentID;
oMail.HtmlBody = "<html><body>this is a <img src=\"cid:"
+ contentID + "\"> embedded image.</body></html>";
很抱歉没有解释,我只会说一点英文