Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何同时使用javamail和appengine API?_Java_Google App Engine_Jakarta Mail - Fatal编程技术网

如何同时使用javamail和appengine API?

如何同时使用javamail和appengine API?,java,google-app-engine,jakarta-mail,Java,Google App Engine,Jakarta Mail,我发现这个话题: 我也有同样的问题,我需要同时使用Javamail API和GAE API。我创建了一个在PC上运行的应用程序,用于发送电子邮件。我使用javamailapi,它工作得很好。然后我创建一个在GAE上运行的应用程序来收集客户的反馈,然后将它们保存在数据存储中。因此,我在PC应用程序中添加了一个函数,用于从数据存储中检索数据。然后我必须使用appengine-api.jar。代码编译没有问题。但它在运行时引发异常: com.google.apphosting.api.ApiProxy

我发现这个话题:

我也有同样的问题,我需要同时使用Javamail API和GAE API。我创建了一个在PC上运行的应用程序,用于发送电子邮件。我使用javamailapi,它工作得很好。然后我创建一个在GAE上运行的应用程序来收集客户的反馈,然后将它们保存在数据存储中。因此,我在PC应用程序中添加了一个函数,用于从数据存储中检索数据。然后我必须使用appengine-api.jar。代码编译没有问题。但它在运行时引发异常:

com.google.apphosting.api.ApiProxy$CallNotFoundException: The API package 'mail' or call 'Send()' was not found.
我发现appengine-api.jar中有javax.mail.*,这可能与javamail.jar冲突。我在某些情况下测试:

案例1:保留javamail.jar,删除appengine-api.jar。它可以发送邮件

案例2:保留javamail.jar,只删除appengine-api.jar中的javax目录。它仍然抛出上述异常

案例3:删除javamail.jar,保留appengine-api.jar。我打算使用appengine-api.jar中的javax.mail.*发送邮件。它编译为ok,但在运行时抛出上述异常

我使用命令行制作这个应用程序。我不使用-classpath变量,而是将所有需要的jar文件复制到…/jdk1.7.0_55/jre/lib/ext中

如何同时使用javamail.jar和appengine-api.jar

更新:也许我没说清楚。我不从appengine发邮件。我从PC应用程序发送。在那个PC应用程序中,我必须使用appengine-api.jar从数据存储中检索数据。所以我的PC应用程序中需要两个.jar api文件。

你读了吗?在AppEngine上,发送邮件是一项托管服务(除非通过套接字)

不包括javamail.jar

以下是发送电子邮件的方式:

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

String msgBody = "...";

try {
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
    msg.addRecipient(Message.RecipientType.TO,
                     new InternetAddress("user@example.com", "Mr. User"));
    msg.setSubject("Your Example.com account has been activated");
    msg.setText(msgBody);
    Transport.send(msg);

} catch (AddressException e) {
    // ...
} catch (MessagingException e) {
    // ...
}
在开发服务器上,不会发送邮件,但会在控制台上登录。
另外,仔细阅读关于允许发件人的段落,这通常是下一个问题。

它解决了。

如上所述,即使我完全删除appengine-api.jar中的javax.*目录,它也不起作用。只有从/jre/lib/ext中删除jar文件,它才能工作。我认为appengine-api.jar中仍然有许多影响javamail.jar的“跟踪”。查看该jar文件后,我发现appengine-api.jar/META-INF/中有3个文件对javamail.jar有影响:

jamamail.address.map
javamail.charset.map
javamail.providers
我删除这3个文件,它的工作!这就足够了,我不必再删除javax.*目录,只需删除这3个文件即可


我不认为这是最好的解决方案,但到目前为止,我找不到在PC应用程序中同时使用javamail.jar和appengine-api.jar的其他解决方案。

我知道,但我不从appengine发送邮件。我从PC应用程序发送。在那个PC应用程序中,我必须使用appengine-api.jar从数据存储中检索数据。