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);
}
}
我有以下代码可以将图像嵌入到 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);
}
}