我知道如何将文件添加到MailItem.Attachments但是如何检查文件是否已添加到附件?
例如,我有文件名"C:\\myFolder\\myFile.txt"
。如何检查此文件是否已附加?我需要这个以防止将文件双重附加到新电子邮件。
这是我到目前为止所做的:
var mItem = Outlook.Interfaces.HostAddIn.Application.ActiveInspector().CurrentItem as MailItem;
if (mItem != null)
{
//this works fine but I need to check if already attached first like below
//mItem.Attachments.Add(localFilePath);
bool found = false;
string attachments = "";
for (int i = 1; i <= mItem.Attachments.Count; i++)
{
attachments +=
"DisplayName: " + mItem.Attachments[i].DisplayName //shows just myFile.txt, no path
+ " / FileName: " + mItem.Attachments[i].FileName //shows just myFile.txt, no path
+ " / PathName: " + mItem.Attachments[i].PathName; //shows ""
//I tried here PathName, FileName, DisplayName but all return just name, without the path
if (mItem.Attachments[i].PathName == localFilePath)
{
found = true;
}
}
if (!found)
{
mItem.Attachments.Add(localFilePath); //attach only if not already attached
}
}
答案 0 :(得分:1)
您所拥有的只是您可以做的事情 - FileName
将匹配,PathName
将始终为空,DisplayName
将与FileName
相同。< / p>
您还可以比较旧文件和现有文件大小,但不要使用Attachment.Size
,因为它包含MAPI指定属性的大小加上实际文件数据。
另外,请不要忘记检查Attachmeent.Type == olByValue
:您只需要常规附件。
您还可以(如果文件名匹配)将现有附件保存到临时文件夹(Attachment.SaveAsFile
)并比较文件大小。如果它们匹配,您还可以比较上下文(例如,计算CRC)。
请注意,您无法仅使用OOM直接访问附件数据,您需要扩展MAPI(IAttach::OpenProperty(PR_ATTACH_DATA_BIN, IID_IStream, ...)
)或赎回(Attachment.AsText/AsArray
/等)。否则,您将需要使用Attachment.SaveAsFile
,然后删除临时文件。