您好我必须使用C#在Outlook 2010的本地目录中分别阅读附件和内嵌图像。我已经使用了属性和内容ID概念。我正在使用以下代码执行此操作,但它现在正在运行。
if (mailItem.Attachments.Count > 0)
{
/*for (int i = 1; i <= mailItem.Attachments.Count; i++)
{
string filePath = Path.Combine(destinationDirectory, mailItem.Attachments[i].FileName);
mailItem.Attachments[i].SaveAsFile(filePath);
AttachmentDetails.Add(filePath);
}*/
foreach (Outlook.Attachment atmt in mailItem.Attachments)
{
MessageBox.Show("inside for each loop" );
prop = atmt.PropertyAccessor;
string contentID = (string)prop.GetProperty(SchemaPR_ATTACH_CONTENT_ID);
MessageBox.Show("content if is " +contentID);
if (contentID != "")
{
MessageBox.Show("inside if loop");
string filePath = Path.Combine(destinationDirectory, atmt.FileName);
MessageBox.Show(filePath);
atmt.SaveAsFile(filePath);
AttachmentDetails.Add(filePath);
}
else
{
MessageBox.Show("inside else loop");
string filePath = Path.Combine(destinationDirectoryT, atmt.FileName);
atmt.SaveAsFile(filePath);
AttachmentDetails.Add(filePath);
}
}
}
请帮助正在进行的工作....
答案 0 :(得分:2)
我来到这里寻找解决方案,但不喜欢在整个HTMLBody中搜索“cid:”的想法。首先,对于每个文件名都这样做很慢,其次,如果正文中出现“cid:”,我会得到误报。另外,在HTMLBody上执行ToLower()不是一个好主意。
相反,我最终在HTMLBody上使用一次正则表达式来查找&lt; img&gt;的任何实例。标签。因此,没有办法在正文中错误地匹配“cid:”(但不太可能)。
Regex reg = new Regex(@"<img .+?>", RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
MatchCollection matches = reg.Matches(mailItem.HTMLBody);
foreach (string fileName in attachments.Select(a => a.FileName)
{
bool isMatch = matches
.OfType<Match>()
.Select(m => m.Value)
.Where(s => s.IndexOf("cid:" + fileName, StringComparison.InvariantCultureIgnoreCase) >= 0)
.Any();
Console.WriteLine(fileName + ": " + (isMatch ? "Inline" : "Attached"));
}
我很确定我可以写一个正则表达式来返回文件名,它可能会更高效。但是为了那些不是正则表达式大师的人必须维护代码,我宁愿花费额外的费用。
答案 1 :(得分:0)
我知道这是一个老问题,但答案可能对某人有所帮助。
using Attachment = MsgReader.Outlook.Storage.Attachment;
foreach (Attachment attachment in mailItem.Attachments.Where(a => ((Attachment)a).Hidden == false)) {
// do whatever you want with the 'real' attachments.
}
答案 2 :(得分:-1)
这对我有用 - 检查附件名称是否出现在电子邮件的HTMLBody中
VB.NET
<i>
For Each oAttachment In m_olMailItem.Attachments
If m_olMailItem.HTMLBody.ToLower.Contains("cid:" & oAttachment.FileName) = True Then
Msgbox("Embedded")
Else
Msgbox("Not Embedded ! ")
End if
http://www.outlookforums.com/threads/44155-detecting-if-attachement-is-embedded-or-not/