【问题标题】:sending email with images发送带有图像的电子邮件
【发布时间】:2013-06-01 10:14:44
【问题描述】:

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

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

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

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

提前感谢您的任何建议!

【问题讨论】:

  • 你提到的最后一个选项在我看来是最好的。这样,即使您的用户上传大图像,您也不会发送大电子邮件(或向很多人发送不那么大的电子邮件,无论如何都会导致大量带宽)。并且更广泛地支持从 url 加载图像。当然,这会迫使您使用您提到的脚本运行网络服务器。

标签: c# smtp


【解决方案1】:

将图像作为附件添加会起作用,但缺点是负载更大,并且对您和您的收件人而言带宽利用率更高。在 .net 中添加附件的代码非常简单:

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

另一方面,引用存储在网络上某处的图像可以减少电子邮件的大小,并为收集请求图像的客户的跟踪数据提供了可能性。当然,大部分邮件客户端都会先询问用户是否要下载图片,所以你的跟踪只会很粗略。

【讨论】:

    【解决方案2】:

    您应该尝试将图像保存在本地磁盘中,然后包括嵌入的图像。

            // 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>";
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-29
      • 2013-11-11
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2011-12-27
      相关资源
      最近更新 更多