Outlook MailItem 嵌入的图像未显示在已发送邮件中

Outlook MailItem embed images not shown in sent mails

我有以下代码可以将图像嵌入到 Outlook MailItems:

private void ReplaceImageIds()
{
   foreach(var image in Image.GetImagesFromText(HTMLBody))
   {
      var imageTag = $"<img src \" cid:{image.Id.ToString()} \"/>";

      var attachment = _mailItem.Attachments.Add(image.FilePath, OlAttachmentType.olEmbeddeditem, null, "");
      attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x370E001F", "image/png");
      attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", image.Id.ToString());

      HTMLBody = HTMLBody.Replace($"ImageId={image.Id.ToString()}", imageTag);
   }
}

效果很好。当我收到电子邮件时会显示图像 - 但就在那里。

当我在 outlook 中查看我的已发邮件文件夹时,图片显示如下:

有没有人知道为什么他们会这样显示并且可以帮助我解决这个问题?

我对此感到困惑,因为在我收到电子邮件时会显示图片。

邮件是这样发送的:

public Boolean Send()
{
   // Check if all properties are set.
   Validate();

   try
   {
      var oApp = new Application();

      var oNS = oApp.GetNamespace("mapi");

      oNS.Logon();

      _mailItem = oApp.CreateItem(OlItemType.olMailItem) as MailItem;

      // Set To, CC and BCC.
      AddRecipients();

      // Replace images.
      ReplaceImageIds();

      if (Body != null)
         _mailItem.Body = Body;

      if(HTMLBody != null)
         _mailItem.HTMLBody = HTMLBody;              

      _mailItem.Subject = Subject;

      // Set account to send.
      SetSendingAccount(oApp);

      // Add attachments.
      AddAttachments();

      _mailItem.Send();

      oNS.Logoff();

      return true;
   }
   catch (System.Exception ex)
   {
      Utils.LogException(ex, "Could not send email.");
      throw new System.Exception("Could not send email.", ex);
   }
}

提前致谢。

我刚刚解决了这个问题。

对于那些遇到同样问题的人,这是我添加图像引用的新方法:

private void ReplaceImageIds()
{
   foreach (var image in Image.GetImagesFromText(HTMLBody))
   {
      var imageTag = $"<img src = \"cid:{image.Id.ToString()}\"/>";

      var attachment = _mailItem.Attachments.Add(image.FilePath, OlAttachmentType.olEmbeddeditem, 0, image.Name);

      attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x370E001F", "image/jpg");
      attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", image.Id.ToString());

      HTMLBody = HTMLBody.Replace($"ImageId={image.Id.ToString()}", imageTag);

      }
   }