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