SimpleEmail 在 IntelliJ 中工作从命令行失败

问题描述

使用 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 发布后重新测试。