如何通过Delphi子线程访问Outlook电子邮件

时间:2014-11-09 14:00:56

标签: multithreading delphi outlook

我用它来访问子线程中的Outlook电子邮件:

try
  Outlook := GetActiveOleObject('Outlook.Application') ;
except
  Outlook := CreateOleObject('Outlook.Application') ;
end;
NameSpace := Outlook.GetNameSpace('MAPI');
Folder := NameSpace.Folders;

找到指定的文件夹后,我通过以下方式访问电子邮件:

var MailItem: Variant;
MailItem := Folder.Items[i];

然后我使用应用程序中的邮件列表来访问它们。 这适用于主线程或子线程本身。 但是当我将从子线程获得的MailItem传递给主线程时,我得到了一个例外。 似乎Folder.Items返回一个严格分配给子线程的指针,并且不能从主线程访问。

如何获取一长串不阻止主线程的电子邮件?我想要比Application.ProcessMessages;

更好的东西

1 个答案:

答案 0 :(得分:1)

您的代码在哪里运行?它是一个独立的exe或COM插件吗?请记住,只要Outlook 2013检测到对象正在使用其主线程以外的线程(如果是COM插件),就会引发异常。在独立的exe的情况下,无论如何所有调用都被封送到主Outlook线程,所以你没有通过使用辅助线程获得任何东西。

您可以使用扩展MAPI或MAPI包装器(例如Redemption - 其RDO对象系列是线程安全的。)