我找到了这个主题:Exception while using JavaMail with Google AppEngine: How to fix this?
我遇到同样的问题,我需要一起使用Javamail API和GAE API。我创建了一个在PC上运行的应用程序,用于发送电子邮件。我使用javamail API,它工作正常。然后我在GAE上创建一个应用程序来收集客户的反馈,然后将它们保存在数据存储区中。所以我在PC应用程序中添加了一个用于从Datastore检索数据的函数。然后我必须使用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。*来发送邮件。它编译好,但在运行时抛出上述异常。
我使用命令行来制作这个应用程序。我没有使用-classpath变量,我复制了所有需要的jar文件... / jdk1.7.0_55 / jre / lib / ext
如何一起使用javamail.jar和appengine-api.jar?
更新:也许我没有说清楚。我不会从appengine发送邮件。我从一个PC应用程序发送。在那个PC应用程序中,我必须使用appengine-api.jar从Datastore中检索数据。所以我的PC应用程序中需要两个.jar api文件。
答案 0 :(得分:2)
它解决了。
如上所述,即使我在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的其他解决方案。
答案 1 :(得分:0)
您是否阅读过https://developers.google.com/appengine/docs/java/mail/usingjavamail?在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) {
// ...
}
在开发服务器上,没有邮件被发送,但会在控制台上记录。 另外,请仔细阅读允许发件人的段落,这通常是下一个问题。