发送邮件无法正常工作

我的 DigitalOcean Discourse Droplet 无法发送邮件。我收到的错误如下:

Delivered mail d8f9bf03-a3ce-4b42-8226-fc4f40a9c724@foo.barbar.com (5099.4ms)

Job exception: 504 5.7.4 Unrecognized authentication type [BL0PR0102CA0036.prod.exchangelabs.com]

我的设置如下:

  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: foo@bar.com
  DISCOURSE_SMTP_PASSWORD: "mypassword"
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

我已从 Droplet 上尝试使用 telnet,没有报错:
telnet smtp.office365.com 587

可能是什么问题?我已经在本地使用 Python 测试过这些 SMTP 设置组合,可以正常工作,因此我认为问题不在设置上。

你好,
尝试添加:

  DISCOURSE_SMTP_AUTHENTICATION: login

并在 app.yml 的末尾添加:

 - exec: rails r "SiteSetting.notification_email='foo@bar.com'"

你好 mik
exec 语句执行失败:

FAILED

--------------------

Pups::ExecError: rails r "SiteSetting.notification_email='foo@bar.com'" 执行失败,返回状态为 #<Process::Status: pid 2229 exit 2>

失败位置:/pups/lib/pups/exec_command.rb:112:in `spawn'

exec 执行失败,参数为 "rails r \"SiteSetting.notification_email='foo@bar.com'\""

9628e31c775b74ad0f3a555b6af27701aa40b1f8b86419fa44a7c389cc5e34ae

** 启动失败 ** 请向上滚动并查找更早的错误信息,可能不止一条。

./discourse-doctor 可能有助于诊断问题。

更新中省略了 exec 命令,但添加了:

  DISCOURSE_SMTP_AUTHENTICATION: login

并未返回错误,我只看到:
Delivered mail be6d8718-5445-48cc-a120-6d6d1eab9eb7@discourse.bar.com (4307.2ms)

但我仍然没有收到邮件(已检查过垃圾邮件文件夹)。

您可以尝试以下操作以找到正确的配置,并可能获得一些错误信息:

docker exec -t -i id_of_your_container /bin/bash

然后在容器内部执行:

apt install s-nail
echo "这是邮件正文,包含邮件内容" | s-nail -r "foo@bar.com" -s mysubject -S "smtp=smtp.office365.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="foo@bar.com" -S smtp-auth-password="xxxxxxxx" -S ssl-verify=ignore youremail@example.com

您可以更改不同的值(例如:smtp-auth=login)以尝试找到正确的配置。这样您可能会获得更精确的错误信息。

echo "这是消息正文,包含消息内容" | s-nail -r "foo@bar.com" -s mysubject -S "smtp=smtp.office365.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="foo@bar.com" -S smtp-auth-password="xxxxxxxx" -S ssl-verify=ignore youremail@example.com

我成功了,收到了邮件!不过由于我的密码以“!”开头,我必须将 smtp-auth-password="xxxxxxxx" 改为单引号。

我能看出与我的配置的唯一区别就是这个标志:
-S ssl-verify=ignore

我也需要添加这个标志吗?
感谢您的帮助!

尝试添加:

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

在您的配置中,这与 ssl-verify=ignore 相同。

没有报错,但收件箱里仍然没有邮件 :frowning: 回顾一下,这是我现在配置的内容:

  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: info@foo.com
  DISCOURSE_SMTP_PASSWORD: 'xxx'
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

请再次尝试添加(这与 s-nail 命令行测试中的 -r 选项相同):

  - exec: rails r "SiteSetting.notification_email='foo@bar.com'"

电子邮件地址必须与您的账户一致。

同时请检查 app.yml 文件中的缩进,别忘了开头的“-”。格式为:两个空格,然后是“-”,再一个空格,接着是“exec…”:)

我也遇到了同样的问题。我同样在 Digital Ocean 上启动了一个运行 Discourse 的 Droplet。在尝试了所有这些建议并每次重建后(sudo ./launcher rebuild app),我使用了“sudo ./discourse-doctor”命令。

504 5.7.4 无法识别的认证类型 [BL0PR01CA0015.prod.exchangelabs.com]

在容器内使用 s-nail 对我来说也有效,没有任何问题。我尝试过不带"-S ssl-verify=ignore"参数,也能正常工作。有人能确认一下在 Digital Ocean Droplet 上安装的内容是否能正确发送邮件吗?

向您的邮件管理员查询 smtp_authentication 的有效值,并将 DISCOURSE_SMTP_AUTHENTICATION 设置为一个可用的值。

感谢所有帮助,我已经放弃并转向了另一个论坛解决方案。

这是微软,他们的说明如下,未指定 smtp_authentication

你们不支持此类服务器吗?能否直接创建一个账户,连接到它,并告诉我们所需的设置?

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

这解决了我的问题,谢谢!