无法在Outlook中获取新邮件的正文/附件

时间:2014-04-01 20:36:36

标签: c# com outlook add-in

我已经使用C#开发了一个Outlook插件,对于收到的每封新邮件,我获取(并保存)发件人/主题/电子邮件正文&附件。好吧,最后的2让我很头疼。我可以看到发件人和新邮件的主题,但对于身体和附件,这似乎是一个问题。我使用NewMailEx在收件箱中获取新邮件。该函数如下所示:

private void Application_NewMailEx(string EntryIDCollection)
    {

        string[] entryIdArray = EntryIDCollection.Split(',');
        foreach (string entryId in entryIdArray)
        {


            try
            {
                Outlook.MailItem item =   (Outlook.MailItem)Application.Session.GetItemFromID(EntryIDCollection, null);

                string subj = item.Subject; //works
                string to = item.To; //works
                string bec = item.BCC; //does not work but dont care
                string body = item.Body; //DOES NOT SAVE THE BODY OF THE NEW MAIL RECEIVED


                string final = "Sender: " + item.SenderEmailAddress + "\r\n" + "Subject: " + subj + "\r\n" + "BCC: " + bec + "\r\n" + "TO: " + to + "\r\n\n" + "Body: " + body + "\r\n\n";
                System.IO.File.AppendAllText(@"D:\tmp\atr.txt", final);
                 //the result of item.attachments.count is always 0 , even though I've 
                 //sent mails with a different number of attachments. So the if 
                 //statement is false                                 
                if (item.Attachments.Count > 0) 
                {
                    for (int i = 1; i <= item.Attachments.Count; i++)
                    {
                        item.Attachments[i].SaveAsFile(@"D:\tmp\" + item.Attachments[i].FileName);
                    }
                }





               Marshal.ReleaseComObject(item);

            }
            catch (System.Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

Item变量来自哪里?您需要使用Application.Session.getItemfromID()初始化它。

答案 1 :(得分:0)

我正在用VBA写作,所以我觉得在这里发布我的代码会是一个失礼,但是我已经找到了一个使用Outlook应用程序中的类似对象库的解决方案,我认为这很好地转移到了你的C ++意图。 / p>

首先,切换到POP3肯定会解决这个问题,但是你仍然坚持使用POP3,这只是从编程的角度来看是理想的。

我找到的解决方案遵循此算法:

{{1}}

您看到调用与Application_NewMailEx相同的函数如何创建一种循环,因为如果item.DownloadState不是1,您将再次调用该函数?我知道这不是最理想的编码实践,但我已经搜索了互联网,Outlook应用程序和Outlook对象库专家不知道如何以任何其他方式解决这个问题(事实上,没有人提出这个解决方案)< / p>

对于我的完整VBA解决方案,请查看:

https://superuser.com/questions/894972/outlook-strange-item-attachments-error/990968#990968