Outlook SMTP 服务器问题 (SMTPSyntaxError)

大家好!

我一直在努力在 CentOS 服务器上搭建一个自托管的 Discourse 实例。大部分工作看起来都很好,我已经配置好了主机名和其他东西,Docker 容器也已启动,我可以在本地网络通过 http://discourse.foo.co 访问我的 Discourse 实例。

然而,我在这里有点卡住了,因为我无法创建我的第一个用户,因为我使用的 SMTP 设置似乎不起作用,并且一直抛出 Net::SMTPSyntaxError 错误,无论我怎么尝试。

我在 app.yml 中的 SMTP 设置是:

## TODO: 将被设为管理员和开发者的逗号分隔的电子邮件列表
## 在首次注册时,例如 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'brian@foo.co'

  ## TODO: 用于验证新帐户和发送通知的 SMTP 邮件服务器
  # 需要 SMTP 地址、用户名和密码
  # 警告:SMTP 密码中的字符 '#' 可能会导致问题!
  DISCOURSE_SMTP_ADDRESS: foo.mail.protection.outlook.com
  DISCOURSE_SMTP_PORT: 25
  DISCOURSE_SMTP_USER_NAME: user@foo.co
  DISCOURSE_SMTP_PASSWORD: 一个包含特殊字符 '@' 和 '/' 的密码。密码不包含 '#' 特殊字符。
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_ENABLE_START_TLS: true         # (可选,默认为 true)
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (某些提供商需要)
  DISCOURSE_NOTIFICATION_EMAIL: 'community@foo.co'    # (用于发送通知的地址)

我在 Discourse 论坛上到处查找,但搜索 ‘SMTPSyntaxError’ 没有任何结果。在 Google 上,我也找不到能帮助我的解决方案。

相同的 SMTP 设置,当输入到我们的 Bamboo 和 Jira 服务器时,工作得非常好,并且能够正常发送电子邮件。

我也使用了像 https://dnschecker.org/smtp-test-tool.php 这样的在线测试工具,它能够正常发送测试电子邮件。例如,输入上面显示的相同详细信息,会成功地将一封测试电子邮件发送到我的收件箱,其内容如下:

SMTP 主机: foo.mail.protection.outlook.com.
端口: 25
使用显式 TLS 加密: 否
使用隐式 TLS/SSL 加密:
使用身份验证: 否
发件人电子邮件: test@foo.co
收件人电子邮件: brian@foo.co

任何帮助都将不胜感激,谢谢,
Brian

我建议转储从容器到 SMTP 服务器的流量,这样您就可以确切地看到线路上发生了什么。

您可以通过在容器内运行以下命令来触发电子邮件:

rake 'emails:test[your.email.address@your.domain]'

您应该会看到例如:

root@michael-discourse-docker-app:/var/www/discourse# rake 'emails:test[michael@contoso.com]'
Testing sending to michael@contoso.com using mail.contoso.net:587, username:michael with plain auth.
SMTP server connection successful.
Sending to michael@contoso.com. . .
Mail accepted by SMTP server.
Message-ID: e7adb5c4-f404-4800-b070-631b06ff5335@mx1.contoso.com

这可能也会给您一些线索。

3 个赞

您好 Michael,

感谢您的建议,但它似乎与我使用 ./discourse-doctor 时出现的错误相同。

root@discourse-app:/var/www/discourse# rake 'emails:test[brian.lui@foo.co]'
Testing sending to brian.lui@foo.co using foo.mail.protection.outlook.com:25, username:user@foo.co with login auth.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR

Net::SMTPSyntaxError

====================================== SOLUTION =======================================
这不是一个常见的错误。没有推荐的解决方案!

请将上面确切的错误消息报告给 https://meta.discourse.org/
(如果您找到了解决方案,也请一并报告!)
=======================================================================================

Brian

当我在容器内运行命令时(正如我在 Discourse SMTP 故障排除指南中所见):

openssl s_client -connect foo.mail.protection.outlook.com:25 -starttls smtp

一切看起来都很正常,但没有出现 250 DSN,而是出现了 250 SMTPUTF8。然后,当我尝试输入命令 EHLO \"i am here\" 时,没有任何反应,最终超时:

451 4.7.0 Timeout waiting for client input [YT1PEPF00001E8C.CANPRD01.PROD.OUTLOOK.COM 2024-02-23T17:51:16.770Z 08DC342D15BDD245]\nread:errno=0

我得到的结果一样。

我没有什么建议,除了这似乎是邮件服务器本身的问题,而不是 Discourse 的问题。

我不认为这个服务器会用于邮件提交。你确定这是正确的吗?

我看到其他人使用了不同的提交服务器并成功了:

2 个赞