JavaMail 无法从 docker 容器发送电子邮件
JavaMail fails to send email from docker container
我刚刚将一些 Java 代码部署到生产环境(它是部署在 Tomcat 中的 Java 网络应用程序),我注意到负责发送电子邮件的模块开始失败。
当我的本地系统上的代码为 运行 时,情况并非如此。我至少可以发送到 Yahoo!我本地服务器上的邮件、Google 邮件和邮箱。
从我的本地系统发送时,我的服务器上的日志 (/var/log/maillog)
显示:
Jun 8 08:37:22 folo-folo postfix/smtps/smtpd[31137]: connect from unknown[41.220.75.164]
Jun 8 08:37:25 folo-folo postfix/smtps/smtpd[31137]: 67EA680EA480: client=unknown[41.220.75.164], sasl_method=LOGIN, sasl_username=helpdesk@folo-folo.com
Jun 8 08:37:26 folo-folo postfix/cleanup[31216]: 67EA680EA480: message-id=<1177096266.0.1559979567305.JavaMail.gbemirojiboye@Gbemiros-MacBook-Pro.local>
Jun 8 08:37:26 folo-folo postfix/qmgr[6945]: 67EA680EA480: from=<helpdesk@folo-folo.com>, size=530, nrcpt=2 (queue active)
Jun 8 08:37:26 folo-folo postfix/smtps/smtpd[31137]: disconnect from unknown[41.220.75.164]
Jun 8 08:37:26 folo-folo postfix/smtp[31217]: 67EA680EA480: to=<xxxx@gmail.com>, relay=gmail-smtp-in.l.google.com[108.177.15.26]:25, delay=1.7, delays=1.1/0.02/0.3/0.24, dsn=2.0.0, status=sent (250 2.0.0 OK 1559979574 e2si3106225wrj.113 - gsmtp)
Jun 8 08:37:28 folo-folo postfix/smtp[31218]: 67EA680EA480: to=<xxxx@yahoo.com>, relay=mta7.am0.yahoodns.net[98.137.159.24]:25, delay=3.4, delays=1.1/0.03/1.5/0.79, dsn=2.0.0, status=sent (250 ok dirdel)
Jun 8 08:37:28 folo-folo postfix/qmgr[6945]: 67EA680EA480: removed
此消息已发送完毕。
但是,当从 tomcat 中部署在 docker 容器内的同一个应用发送时,日志变为:
Jun 8 08:34:27 folo-folo postfix/smtps/smtpd[30255]: connect from unknown[172.18.0.6]
Jun 8 08:34:29 folo-folo postfix/smtps/smtpd[30255]: warning: unknown[172.18.0.6]: SASL LOGIN authentication failed: **UGFzc3dvcmQ6**
Jun 8 08:34:29 folo-folo postfix/smtps/smtpd[30255]: lost connection after AUTH from unknown[172.18.0.6]
Jun 8 08:34:29 folo-folo postfix/smtps/smtpd[30255]: disconnect from unknown[172.18.0.6]
此消息从未发送过。
我可以从主机上的服务器日志中看到 Docker 容器能够发出邮件请求,但由于某种原因,身份验证失败。
我可以冒险猜测,如果我向主机容器上的 api 发出请求并让它发送电子邮件,它会起作用。但这对我的设计来说会很不方便。
我该如何解决这个问题?
我应该提一下,这里的问题看起来很像 posted here
这是我的错误。
我的凭据混淆了,这就是导致从 Docker 发出请求时出错的原因。
更正凭据使错误消失。
我刚刚将一些 Java 代码部署到生产环境(它是部署在 Tomcat 中的 Java 网络应用程序),我注意到负责发送电子邮件的模块开始失败。
当我的本地系统上的代码为 运行 时,情况并非如此。我至少可以发送到 Yahoo!我本地服务器上的邮件、Google 邮件和邮箱。
从我的本地系统发送时,我的服务器上的日志 (/var/log/maillog)
显示:
Jun 8 08:37:22 folo-folo postfix/smtps/smtpd[31137]: connect from unknown[41.220.75.164]
Jun 8 08:37:25 folo-folo postfix/smtps/smtpd[31137]: 67EA680EA480: client=unknown[41.220.75.164], sasl_method=LOGIN, sasl_username=helpdesk@folo-folo.com
Jun 8 08:37:26 folo-folo postfix/cleanup[31216]: 67EA680EA480: message-id=<1177096266.0.1559979567305.JavaMail.gbemirojiboye@Gbemiros-MacBook-Pro.local>
Jun 8 08:37:26 folo-folo postfix/qmgr[6945]: 67EA680EA480: from=<helpdesk@folo-folo.com>, size=530, nrcpt=2 (queue active)
Jun 8 08:37:26 folo-folo postfix/smtps/smtpd[31137]: disconnect from unknown[41.220.75.164]
Jun 8 08:37:26 folo-folo postfix/smtp[31217]: 67EA680EA480: to=<xxxx@gmail.com>, relay=gmail-smtp-in.l.google.com[108.177.15.26]:25, delay=1.7, delays=1.1/0.02/0.3/0.24, dsn=2.0.0, status=sent (250 2.0.0 OK 1559979574 e2si3106225wrj.113 - gsmtp)
Jun 8 08:37:28 folo-folo postfix/smtp[31218]: 67EA680EA480: to=<xxxx@yahoo.com>, relay=mta7.am0.yahoodns.net[98.137.159.24]:25, delay=3.4, delays=1.1/0.03/1.5/0.79, dsn=2.0.0, status=sent (250 ok dirdel)
Jun 8 08:37:28 folo-folo postfix/qmgr[6945]: 67EA680EA480: removed
此消息已发送完毕。
但是,当从 tomcat 中部署在 docker 容器内的同一个应用发送时,日志变为:
Jun 8 08:34:27 folo-folo postfix/smtps/smtpd[30255]: connect from unknown[172.18.0.6]
Jun 8 08:34:29 folo-folo postfix/smtps/smtpd[30255]: warning: unknown[172.18.0.6]: SASL LOGIN authentication failed: **UGFzc3dvcmQ6**
Jun 8 08:34:29 folo-folo postfix/smtps/smtpd[30255]: lost connection after AUTH from unknown[172.18.0.6]
Jun 8 08:34:29 folo-folo postfix/smtps/smtpd[30255]: disconnect from unknown[172.18.0.6]
此消息从未发送过。
我可以从主机上的服务器日志中看到 Docker 容器能够发出邮件请求,但由于某种原因,身份验证失败。
我可以冒险猜测,如果我向主机容器上的 api 发出请求并让它发送电子邮件,它会起作用。但这对我的设计来说会很不方便。
我该如何解决这个问题?
我应该提一下,这里的问题看起来很像 posted here
这是我的错误。
我的凭据混淆了,这就是导致从 Docker 发出请求时出错的原因。
更正凭据使错误消失。