我有一个程序,它使用Outlook发送带有附件的邮件。它工作正常,发送带有附件的电子邮件,但在发件箱中,邮件中没有附件。当有人收到邮件时,附件是可见的,但发件箱中没有。这里有一些代码:
Outlook.MailItem mail = (Outlook.MailItem)outlookApp.CreateItem(Outlook.OlItemType.olMailItem);
mail.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
int iAttachType = (int)Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue;
mail.Attachments.Add(Application.StartupPath+"/"+attachment, iAttachType, null, attachment);
mail.To = email;
mail.Subject = "Something";
mail.Body = "Some body";
mail.Send();
在此之前,我使用:
private Outlook.Application outlookApp;
private Outlook._NameSpace outlookNameSpace;
private Outlook.MAPIFolder outbox;
和
outlookApp = new Outlook.Application();
outlookNameSpace = outlookApp.GetNamespace("MAPI");
outlookNameSpace.Logon(null, null, false, false);
outbox = outlookNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderOutbox);
我的outlook程序与Microsoft Exchange Serwer连接。当我使用用C++编写的应用程序时,它将附件保存在发件箱中的邮件中。
谢谢帮助!
您可能正在使用outlook项的旧版本。
如果你对邮件、记录模式、检查员和其他类型(我现在忘记了)的引用比你需要的时间长,就会发生这种情况。
您的引用通常会指向项目的旧版本,即使触发了事件(Folder.BeforeItemMove),保留它也会阻止您获得对更新的引用(带附件的引用)。
另外,你试过if邮件吗。Save()能为你做什么吗?
这是我完成一个项目后立即使用的内容。
public static void NullAndRelease(object o)
{
if (o == null) {
return;
}
try {
int releaseResult = 0;
do {
releaseResult = System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
} while (releaseResult >= 0);
} catch {
} finally {
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
捕获没有任何信息,对我来说也不重要。如果有人传递一个指向com对象以外的对象的引用,就会出现这种情况。您也可以尝试FinalReleaseComObject(o)。