我目前正在开发一个Outlook Addin,它可以在我的MSSQL数据库中保存MailItems和Attachments。
我有一个方法可以保存MailItem及其所有附件。但是,如果我保存所有附件,MailItem中的嵌入图像也会被保存。
有谁知道如何保存所有真正的附件?我的意思是下图中的附件:
而不是邮件正文中的嵌入图片。
这是我用来循环遍历MailItem的所有附件然后保存它的代码:
foreach (Outlook.Attachment att in mailItem.Attachments)
{
try
{
att.SaveAsFile(Path.GetTempPath() + att.FileName);
var fi = new FileInfo(Path.GetTempPath() + att.FileName);
//Saving attachment to DB
var attachment = Attachment.NieuwAttachment(att.FileName, SelectedMap.DossierNr.ToString( CultureInfo.InvariantCulture), -1, Convert.ToInt32(SelectedMap.Tag), fi);
if (!Attachment.InlezenAttachment(attachment)) continue;
OutlookCategories.AddAttachmentCategory(mailItem);
}
catch (Exception ex)
{
var dmsEx = new DmsException("Er is een fout opgetreden bij het opslaan van een bijlage.", ex.Message, ex);
ExceptionLogger.LogError(dmsEx);
}
}
谢谢!
-----------编辑------------
我也在Microsoft TechNet上发布了这个问题,我刚刚收到了问题的答案(参见下面的链接)
Outlook 2007 & 2010: Save all attachments except the embedded attachments C#
-----------编辑------------
我的问题仍然没有解决,我从微软获得的帮助是没用的。所以请真的需要修复它!
答案 0 :(得分:2)
使用此代码已解答here:
if (mailItem.Attachments.Count > 0)
{
// get attachments
foreach (Attachment attachment in mailItem.Attachments)
{
var flags = attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37140003");
//To ignore embedded attachments -
if (flags != 4)
{
// As per present understanding - If rtF mail attachment comes here - and the embeded image is treated as attachment then Type value is 6 and ignore it
if ((int)attachment.Type != 6)
{
MailAttachment mailAttachment = new MailAttachment { Name = attachment.FileName };
mail.Attachments.Add(mailAttachment);
}
}
}
}
答案 1 :(得分:0)
取决于您如何定义'真实'或者'适当的'附件。我将假设您要忽略电子邮件中嵌入的所有图像。这些也是附件,但在html电子邮件的实际主体中引用。
有关如何嵌入附件的说明,请参阅this答案。关键是忽略具有Content-ID值的附件,该附件由电子邮件本身的图像标签引用。
答案 2 :(得分:0)
这对我有用:
var test = attachments[i].PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E");
if (string.IsNullOrEmpty((string)test))
{
//attachment
}
else
{
//embedded image
}