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 中)