发送带图像的电子邮件

时间:2013-06-05 15:58:02

标签: c# smtp

我有一个WinForms应用程序,用户可以在其中配置电子邮件模板,以后将邮件与数据库中的客户端数据合并,然后通过SMTP发送。

我的一切工作正常,但问题出现在用户将图像保存在模板体内时。我正在使用DevExpress RichEdit控件来允许用户创建此电子邮件正文,并且该控件将其转换为我用来发送的HTML。当图像存在时,它使用data-uri将图像直接嵌入到HTML中。

当我使用data-uri图像以这种方式发送电子邮件时,问题就出现了,并非所有客户端都正确地呈现它。我只是在Outlook中测试它,它似乎不起作用。我知道一些基于Web的电子邮件客户端可以正常工作,但我需要它一直在工作,至少对于广泛使用的电子邮件客户端。

我想知道其他人是否已经解决了这个问题,这可能是最好的解决方案吗?我想我可以将图像作为附件发送,然后引用附件,虽然我不确定这是否是最佳做法。另一种方法是将每个图像托管在某个服务器上,然后创建一个必须存储图像的服务(如在数据库中),并提供一种使用ID在Web上查询此图像的方法。然后我的电子邮件将使用img src = site / getImg?imgID = xxx类型的东西。然而,这似乎做了很多工作要做我想要完成的事情,我希望我能用更简单的东西来避免它。

提前感谢任何建议!!

2 个答案:

答案 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>";

很抱歉没有解释,我只会说一点英文