【问题标题】:Sending mail with embedded image from WCF service从 WCF 服务发送带有嵌入图像的邮件
【发布时间】:2013-01-30 22:12:11
【问题描述】:

我有一个向我的客户发送电子邮件的 WCF 服务。该电子邮件正文是html。所以它有 CSS 样式和嵌入的图像。但现在的问题是图像 src 必须作为完整地址给出。那么是否有任何选项可以将图像也作为 wcf 服务的一部分公开并使用该完整地址。

我不想使用 likeResource 选项,因为我使用的是开源电子邮件模板引擎

Town Crier – 用于 .NET 的开源电子邮件模板引擎 http://thecodedecanter.wordpress.com/2010/07/19/town-crier-an-open-source-e-mail-templating-engine-for-net/

此引擎需要将图像作为完整地址提供。

任何更好的解决方案将不胜感激。

谢谢, 阿拉格桑。

【问题讨论】:

  • 您不能将图像上传到您的服务器并在您的电子邮件中引用它吗?喜欢server/path/imagename.gif
  • 不,它需要一个完全限定的 url。
  • 评论中的 url 未正确呈现。想象它前面有 http://。这使它成为一个完全合格的 url。
  • 我尝试了此选项,但我的 Outlook 中没有显示图像,但我只看到带有警告消息的纯文本“如果此消息的显示方式有问题,请单击此处以查看网页浏览器”。当我单击链接时,我会在 IE 浏览器上看到带有图像的正确邮件。如何解决这个问题?
  • 不确定是否可以。据我所知,这是 Outlook 中的一项安全功能。也许您可以将您的域添加为受信任的发件人或其他东西。也许这会有所帮助bit.ly/WNFp1u

标签: c# wcf email c#-4.0 html-email


【解决方案1】:

如果图像是静态的且不太大,您可以使用消息中AlternateViewLinkedResources 属性将它们包含在消息本身中。

AlternateView html = message.AlternateViews.FirstOrDefault(v => v.ContentType.Name == "text/html");
if (html != null)
{
    LinkeResource img = new LinkedResource(imgFileName, imgMimeType);
    img.ContentId = imgContentName;
    html.AddLinkedResources.Add(img);
}

然后使用"cid:ContentId" URL 语法在消息中引用img.ContentId。因此,如果您为图像提供了 "header.jpg" 的 ContentId,那么您可以使用以下方式在 HTML 电子邮件中引用它:<img src="cid:header.jpg" />

不过,对于插入小徽标等非常方便。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2021-10-31
    • 2011-06-01
    • 2017-04-21
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 2015-07-29
    • 2011-08-29
    相关资源
    最近更新 更多