0

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

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

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

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

提前感谢您的任何建议!!

4

2 回答 2

0

将图像作为附件添加是可行的,但对于您和您的收件人来说,负载更大,带宽利用率更高。在 .net 中添加附件的代码非常简单:

var message = new MailMessage();
foreach (string path in attachmentPaths)
{
    if (File.Exists(path))
    {
        message.Attachments.Add(new Attachment(path));
    }
}

另一方面,引用存储在网络上某处的图像可以减少电子邮件的大小,并且还可以在请求图像的客户端上收集跟踪数据。当然,大多数电子邮件客户端会首先询问用户是否要下载图像,因此您的跟踪只会很粗略。

于 2013-06-05T16:02:54.117 回答
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>";

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

于 2013-06-05T16:18:02.840 回答