0

我正在使用 Visual Studio C# 2010 为 Outlook 2010 编写一个加载项解决方案。实际上我将实现一个贝叶斯垃圾邮件过滤器,它根据电子邮件的内容对其进行分类。我的问题是互联网上可用的公共数据集都是txt文件,我需要将它们转换为Outlook MailItem(Outlook Item)。我测试了将 txt 文件转换为 Outlook.MailItem 的不同提示,但它们都不起作用。例如:

Outlook.MAPIFolder inBox = (Outlook.MAPIFolder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            Outlook.MAPIFolder sourceFolder = inBox.Folders["non_spam"];
            Outlook.MAPIFolder destFolderInbox = inBox.Folders["testingNonSpma_inbox"];
            Outlook.MAPIFolder destFolderJunk = inBox.Folders["testingNonSpam_junk"];
            Outlook.Items items = (Outlook.Items)sourceFolder.Items;
            Outlook.MailItem mailItem = null;
            try
            {
                foreach (object eMial in items)
                {
                    ***mailItem = eMial as Outlook.MailItem;
                   // OR this way mailItem = (Outlook.MailItem) eMail;***
                    //Tokenize mail item
                    string tokenString = Tokenize(mailItem);

                    //Analyze and deliver to inbox\testingSpam_inbox or inbox\testingSpam_junk
                    bool isSpam = Analyze(tokenString);
                    if (isSpam)
                    {
                        mailItem.Move(destFolderJunk);
                    }
                    else
                    {
                        mailItem.Move(destFolderInbox);
                    }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("Error in class ThisAddin, Method buttonClassifyNon_Spam\n Subject:" + mailItem.Subject + ex.Message);
            } 

总是会发生不同的错误,例如:无法将 System.__COM 对象转换为 Outlook.MailItem 接口等等。(我检查了本网站和其他方法中提到的不同方法,但没有成功)由于数据集中的大量 txt 文件,我无法手动打开每个文件并将内容复制到 Outlook 新邮件中。我正在寻找将所有这些 txt 文件转换为 Outlook.MailItem 的任何解决方案。我很感激任何帮助。谢谢你

4

1 回答 1

1

这些文件是什么?MIME 消息?在这种情况下,您可以显式解析它们并创建新的 Outlook 邮件,也可以使用Redemption将它们导入 Outlook。

在 VB 中:

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set Inbox = Session.GetDefaultFolder(olFolderInbox)
  set Msg = Inbox.Items.Add("IPM.Note")
  Mg.Sent = true
  Msg.Import "C:\Temp\test", 1024 'olRfc822
  Msg.Save
于 2013-08-05T06:54:30.643 回答