Java 作为Windows服务运行时Jacob COM桥出现问题

Java 作为Windows服务运行时Jacob COM桥出现问题,java,outlook,com,mapi,Java,Outlook,Com,Mapi,我正在编写一个应用程序resposnible,用于从MAPI邮箱下载电子邮件。MAPI是我唯一可以使用的可用协议。所以在研究之后,我发现我不得不使用COM桥来调用Outlook方法,因为没有其他解决方案可以将java应用程序连接到MAPI邮箱。我制作了一个简单的测试应用程序,可以将整个电子邮件保存为.eml文件。但是,当我试图以Windows服务运行此应用程序时,出现了一个问题,我的应用程序只是挂起在执行OutlookMailItem对象的SaveAs方法时。当我以正常方式启动这个应用程序时,j

我正在编写一个应用程序resposnible,用于从MAPI邮箱下载电子邮件。MAPI是我唯一可以使用的可用协议。所以在研究之后,我发现我不得不使用COM桥来调用Outlook方法,因为没有其他解决方案可以将java应用程序连接到MAPI邮箱。我制作了一个简单的测试应用程序,可以将整个电子邮件保存为.eml文件。但是,当我试图以Windows服务运行此应用程序时,出现了一个问题,我的应用程序只是挂起在执行Outlook
MailItem
对象的
SaveAs
方法时。当我以正常方式启动这个应用程序时,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,"GetDefaultFolder", 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....
        }
ActiveXComponent outlook=新的ActiveXComponent(“outlook.Application”);
Dispatch namespace=Dispatch.call(outlook,“GetNamespace”,“MAPI”).toDispatch();
Dispatch sourceFolder=Dispatch.call(命名空间为“GetDefaultFolder”,6).toDispatch()//包含要保存的所有电子邮件的文件夹ID:6
Dispatch doneFolder=Dispatch.call(命名空间为“GetDefaultFolder”,23).toDispatch()//包含已完成电子邮件备份的文件夹ID:23
Dispatch mailList=Dispatch.get(sourceFolder,“Items”).toDispatch();
int itemCount=Dispatch.call(邮件列表,“Count”).getInt();
LOGGER.info(“邮件计数:”+itemCount);

对于(int i=1;i)“可能有其他方法通过MAPI从该邮箱获取邮件?”对进行web搜索以查找解决方案。我已联机查找,并且大多数尝试添加MAPI支持的项目都已关闭或网站已关闭。但是您必须使用MAPI吗?不能使用IMAP吗?您没有使用MAPI,而是使用Outlook对象模型。您是指最新版本的Outlook用于与t对话的HTTP协议上的MAPI吗o Office 365邮箱?在这种情况下,您最好使用EWS。@Andreas是的,MAPI是此邮箱启用的唯一协议,使用IMAP将更容易执行。