问题描述
我正在编写一个可用于从MAPI邮箱下载电子邮件的应用程序。 MAPI是我可以使用的唯一可用协议。因此,经过研究,我发现我被迫使用COM桥来调用Outlook方法,因为没有其他解决方案可将Java应用程序连接到MAPI邮箱。我做了一个简单的测试应用程序,可以将整个电子邮件另存为.eml文件。但是当我尝试将此应用程序作为Windows服务运行时出现问题,我的应用程序只是挂在执行Outlook SaveAs
对象的MailItem
方法上。当我正常运行jar时,wverythings可以正常运行,但是当我使用YAJSW作为LocalSystem帐户上的服务运行它时,它只会停止以该方法执行。
ActiveXComponent outlook = new ActiveXComponent("outlook.application");
dispatch namespace = dispatch.call(outlook,"GetNamespace","MAPI").todispatch();
dispatch sourceFolder = dispatch.call(namespace,"GetDefaultFolder",6).todispatch(); //Folder with all emails to save ID:6
dispatch doneFolder = dispatch.call(namespace,23).todispatch(); //Folder with backups of done emails ID:23
dispatch mailList = dispatch.get(sourceFolder,"Items").todispatch();
int itemCount = dispatch.call(mailList,"Count").getInt();
LOGGER.info("Mail count: " + itemCount);
for(int i = 1; i <= itemCount; i++) {
dispatch mail = dispatch.call(mailList,"Item",i).todispatch();
LOGGER.info("Saving mail: " + tempMsgPath);
dispatch.call(mail,"SaveAs",tempMsgPath); //hangs there
LOGGER.info("Mail saved");
more code....
}
我认为这不是用户权限的问题,经过测试并没问题。它必须作为服务工作,我知道有一个Outlook兑换服务,但是我不想购买任何lib。也许还有其他方法可以通过MAPI从该邮箱中获取邮件?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)