MimeKit:如何嵌入图像?

Posted

技术标签:

【中文标题】MimeKit:如何嵌入图像?【英文标题】:MimeKit: How to embed images? 【发布时间】:2015-10-03 02:23:26 【问题描述】:

我正在使用 MailKit/MimeKit 1.2.7(最新的 NuGet 版本)。

我尝试按照API documentation 中的示例(“使用BodyBuilder”部分)在我的电子邮件的html 正文中嵌入图像。

我当前的代码如下所示:

 var builder = new BodyBuilder();

 builder.HtmlBody = @"<p>Hey!</p><img src=""Image.png"">";

 var pathImage = Path.Combine(Misc.GetPathOfExecutingAssembly(), "Image.png");
 builder.LinkedResources.Add(pathLogoFile);
 message.Body = builder.ToMessageBody();

我可以发送这封电子邮件,实际上图片附加到电子邮件中。但它没有嵌入。

我错过了什么吗?还是这是 Apple Mail 的错(这是我用来接收电子邮件的电子邮件客户端)?

我很感激任何想法(非常感谢 Jeffrey Stedfast 提供了如此出色的工具集!!)。

英格玛

【问题讨论】:

【参考方案1】:

尝试一些类似这样的东西:

var builder = new BodyBuilder ();
var pathImage = Path.Combine (Misc.GetPathOfExecutingAssembly (), "Image.png");
var image = builder.LinkedResources.Add (pathLogoFile);

image.ContentId = MimeUtils.GenerateMessageId ();

builder.HtmlBody = string.Format (@"<p>Hey!</p><img src=""cid:0"">", image.ContentId);

message.Body = builder.ToMessageBody ();

如果这对你有用,我会更新文档。

问题可能是 Apple 的 multipart/related 实现未使用图像 mime 部分上的 Content-Location 标头解析 Image.png 引用(可能是因为它是相对 URL)。

虽然cid: URL 类型应该可以工作,但构造起来有点尴尬,因为您需要知道每个图像附件的Content-Id 值。

【讨论】:

早上好。并感谢您的提示。效果很好!事实上,我也一直在使用 cid: 和我的旧电子邮件组件(在切换到 MailKit 之前)。所以,这个解决方案对我来说是完美的。再次感谢。 我今天又遇到了几个问题。我会将它们放在 *** 上的单独问题/帖子中,如果您有几个更简单的解决方案,我会非常高兴:) 我遇到了嵌入图像的问题。我使用基本相同的方法。 BodyBuilder.LinkedResources.Add() 附件到达。但它被标记为常规附件而不是“内联”。在我自己的客户端中,我看到了 ContentDiposition,看起来像一个常规附件。 Outlook 仍会呈现图像,但还会在电子邮件列表中显示附件图标,就好像电子邮件具有常规附件一样。有什么想法吗? 固定:github.com/jstedfast/MimeKit/commit/… 我在发送前在 BodyBuilder.LinkedResources.Add() 返回的 MimeEntity 上明确设置 IsAttachment = false。你的修复是否在做其他事情。如果不是,我仍然会期待同样的行为。【参考方案2】:

仅供参考,现在可以在http://www.mimekit.net/docs/html/Creating-Messages.htm 下找到。原始答案中的链接已损坏。

【讨论】:

以上是关于MimeKit:如何嵌入图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Mimekit/Mailkit 发送 HTML 消息

如何使用公钥加密字符串并使用 MimeKit 使用私钥解密?

MIMEKIT Multipart Signed.Verify 如何禁用证书吊销列表检查?

如何查找电子邮件转发到的电子邮件地址(在 MimeKit 中)

如何使用 mailkit/mimekit IMAP 下载/保存所有收件箱/发送的电子邮件?

如何强制用户嵌入图像或注册