无法使用 MailKit 在电子邮件中嵌入图像

Cannot embed images in email with MailKit

这个问题已经在 SO 上的几个地方提出并回答了,特别是在这里: 并处理我的确切查询,但答案似乎不适用于我的情况。

我尝试构建一个简单的邮件程序,将图像嵌入 HTML 电子邮件中,但在多个客户端中,所有图像最终仍作为附件。

我怀疑我处理图像附件(一个 .gif 和几个 .png)的方式有问题:

// Add pictures to embedded resources and replace links to pictures in the message
foreach (string imgpath in ImgPaths)
{
    var image = builder.LinkedResources.Add(imgpath);
    image.ContentId = MimeUtils.GenerateMessageId();
    image.ContentDisposition = new ContentDisposition() { Disposition = ContentDisposition.Inline };
    HtmlFormat = HtmlFormat.Replace(Path.GetFileName(imgpath), string.Format("cid:{0}", image.ContentId));
}
builder.HtmlBody = HtmlFormat;
message.Body = builder.ToMessageBody();

我可以从电子邮件中看到(例如,在 Gmail 中收到),确实表明图像被列为:

src="images/cid:TPSXHQUDSAU4.JJRKUIEGLTZ5@Loralei"

在我试过的两个客户端(gmail 和 roundcube)中,所有图像都作为附件附加。我已经浏览了您的教程并检查了这里的所有内容:https://whosebug.com/search?q=Mailkit+Embed 可悲的是,我似乎无法找到我的错误。希望@jstedfast 能看到我在哪里犯了错误?

更新

如@jstedfast 所述,更正后的代码应该是(无论如何对我而言):

foreach (string imgpath in ImgPaths)
            {
                var test = Path.GetFileName(imgpath);
                var image = builder.LinkedResources.Add(imgpath);
                image.ContentId = MimeUtils.GenerateMessageId();
                image.ContentDisposition = new ContentDisposition() { Disposition = ContentDisposition.Inline };
                //HtmlFormat = HtmlFormat.Replace(Path.GetFileName(imgpath), string.Format("cid:{0}", image.ContentId));
                HtmlFormat = HtmlFormat.Replace($"images/{test}", string.Format("cid:{0}", image.ContentId)); //use images/filename
            }

这也是一个很好的指南,https://programming.vip/docs/5dac3983f0cd5.html

这看起来像问题:

<img src="images/cid:TPSXHQUDSAU4.JJRKUIEGLTZ5@Loralei" .../>

需要:

<img src="cid:TPSXHQUDSAU4.JJRKUIEGLTZ5@Loralei" .../>

我的猜测是,为了解决这个问题,您需要更改以下代码行:

HtmlFormat = HtmlFormat.Replace(Path.GetFileName(imgpath), string.Format("cid:{0}", image.ContentId));

对此:

HtmlFormat = HtmlFormat.Replace(imgpath, string.Format("cid:{0}", image.ContentId));

希望对您有所帮助!