2

我在尝试通过 servlet 中的 gmail smtp 发送电子邮件时遇到此错误,它在测试时可以在本地工作,但不能在 google 引擎内部我在 web-inf/libs [activation.jar-smtp.jar-mailapi.jar - mail. jar] 知道如何修复它!

错误: javax.servlet.ServletContext log: unavailable java.lang.SecurityException: SHA1 digest error for javax/mail/Message.class at com.google.appengine.run

代码快照:

 Properties props = new Properties();
 props.setProperty("mail.transport.protocol", "smtp");
 props.setProperty("mail.host", "smtp.gmail.com");
 props.put("mail.smtp.auth", "true"); 
 props.put("mail.smtp.port", "465"); 
 //props.put("mail.debug", "true");
 props.put("mail.smtp.socketFactory.port", "465");
 props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
 props.put("mail.smtp.socketFactory.fallback", "false");
 javax.mail.Session sess = javax.mail.Session.getInstance(props);
 Transport transport = sess.getTransport(); 
 transport.connect();
 transport.send(message);
4

2 回答 2

1

不能在 Google 应用引擎上使用签名的 jar 文件。

如网页所示,您应该尝试取消签名,特别是mail.jar因为错误指示javax/mail/Message.class,请参阅this question以获取示例

于 2012-10-17T07:33:44.063 回答
0

App Engine 的预编译与签名的 JAR 文件不兼容。如果您的应用程序是预编译的(默认),它不能加载签名的 JAR 文件。如果应用程序尝试加载已签名的 JAR,App Engine 将在运行时生成与您类似的异常。
没有签名的 JAR 文件

有两种解决方法。

  1. 剥离 JAR 的签名
  2. 禁用预编译
于 2012-10-17T07:37:13.783 回答