在Outlook.Interop类中以程序方式将项目从“垃圾邮件”文件夹移动到“收件箱”
本文关键字:收件箱 垃圾邮件 移动 文件夹 Interop Outlook 程序 项目 方式 | 更新日期: 2023-09-27 18:25:22
我目前正在完善一个MS Outlook加载项,以提取最终在"垃圾邮件"文件夹中具有"合法"地址的电子邮件,然后将其移动到"收件箱"文件夹中。
这种情况在Gmail地址中经常发生,对我们的员工来说有点困难,他们不得不手动将这些电子邮件链接到他们的客户帐户。
有人尝试过吗?我已经注册了传入电子邮件事件处理程序,以便在收到电子邮件时读取"垃圾邮件"文件夹,但我一直收到一个异常。我怀疑这与其中一些电子邮件是垃圾邮件有关;这仅仅意味着MailItem将有很多错误。
有人有同样的问题吗?这是我的代码:
public void OutlookApplication_ItemReceived(string entryID)
{
//this.outlookNameSpace = this.application.GetNamespace("MAPI");
//Outlook.MAPIFolder inbox = this.outlookNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
//Outlook.MAPIFolder junkFolder = this.outlookNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderJunk);
if (Properties.Settings.Default.AutoLink || Properties.Settings.Default.EnableLeadLoader)
{
Outlook.MailItem mail = null;
try
{
this.Log("Email detected: incoming");
mail = this.application.Session.GetItemFromID(entryID) as Outlook.MailItem;
this.leadLoaderRecipient = Properties.Settings.Default.LeadLoaderRecipient.ToLower();
Outlook.Recipients recips = mail.Recipients; //That's where its crashing as the object is null... if read from spam folder
foreach (Outlook.Recipient recip in recips)
{
Outlook.PropertyAccessor pa = recip.PropertyAccessor;
string smtpAddress = pa.GetProperty(PR_SMTP_ADDRESS).ToString();
if (Properties.Settings.Default.EnableLeadLoader)
{
if (smtpAddress.ToLower() == this.leadLoaderRecipient)
this.ProcessLead(mail);
}
}
if (Properties.Settings.Default.AutoLink)
{
this.AutoLink(mail, true);
}
}
catch (Exception ex)
{
this.Log("Exception (ItemReceived): " + ex.ToString());
}
finally
{
if (mail != null)
{
Marshal.ReleaseComObject(mail);
}
}
}
}
期待你们的想法,伙计们!:)TIA!
您的代码究竟什么时候运行?这是Application.NewMailEx事件处理程序吗?例外情况是什么?
尝试在"垃圾邮件"文件夹中使用Items.ItemAdd事件,而不是使用Application.NewMailEx.