问题描述
使用 org.apache.commons.mail.SimpleEmail 从后台应用程序中发送电子邮件。这已经工作了 8 个月,没有任何问题。 1 月 1 日,它开始失败。该应用程序是在 Mac (macOS 10.15.7) 上运行的 Scala (2.12.8) 和 Java (1.8)。
将电子邮件发送到 smtp.googlemail.com 端口 465(也尝试过 smtp.gmail.com)。
使用 IntelliJ 作为 IDE。如果应用程序在 IntelliJ 中运行,它仍然可以完美运行,但是如果您创建一个 Jar 并从命令行运行,它每次都会失败。使用“sudo”从 Jar 运行也会失败。
那么从 1 月 1 日起,Google 的某些设置是否发生了变化?为什么它仍然可以在 IDE 中工作 - IntelliJ 中是否存在上下文或证书? SSL 需要证书吗?
感谢任何建议!
-------- 附录 - send() 方法的所有参数 ---------
heading: FAILURE --- my addition ID: (None) --- my addition To: j.crowley@computer.org Subject: Backup for JDCMacBook was 150.1M Message: For JDCMacBook,Drive: USBExtA,Backup 2021-01-08-103310 compared to 2021-01-08-053055 Adds: 3.3M Changes: 142.3M Deletes: 4.4M SendIfPossible: true To Host: smtp.googlemail.com To Port: 465 Auth User: tmviewer.smtp@gmail.com Auth Pwd: .... redacted .... Set SSL: true ------- Stack trace ----------- Exception: org.apache.commons.mail.EmailException: Sending the email to the following server Failed : smtp.googlemail.com:465 10:44:11.749 0:00.002 ERROR: org.apache.commons.mail.Email.sendMimeMessage(Email.java:1469) 10:44:11.749 ERROR: org.apache.commons.mail.Email.send(Email.java:1496) 10:44:11.749 ERROR: jdctm.Utils$.sendEMail(Utils.scala:547) 10:44:11.750 0:00.001 ERROR: jdctm.NotifyInfo.notify(Cache.scala:1036) 10:44:11.750 ERROR: jdctm.Cache$.notify(Cache.scala:722) 10:44:11.750 ERROR: jdctm.ExecuteTMUtil.run(Cache.scala:952) 10:44:11.750 ERROR: java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 10:44:11.751 0:00.001 ERROR: java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) 10:44:11.751 ERROR: java.base/java.lang.Thread.run(Thread.java:831)
解决方法
IntelliJ 正在使用 Java 8,已升级到 Java 16(早期访问)以进行某些测试,这就是在命令行上使用的内容。打开 SimpleEmail setDebug(true) 并在 SSL 握手期间失败 - 没有合适的协议(协议被禁用或密码套件不合适)所以 Java 8 和 16 (ea) 之间的协议/密码套件发生了一些变化。在 Java 15.0.1 下工作,在 jdk16.ea.30.2130 下失败。目前将恢复到 Java 8,待 Java 16 发布后重新测试。