SMTP 503 5.5.1 错误:身份验证未启用

我正在使用本地 Postfix SMTP,并遇到以下错误:

503 5.5.1 错误:未启用身份验证

DISCOURSE_SMTP_ADDRESS: mail.xxx.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: resources@xxx.net
DISCOURSE_SMTP_PASSWORD: password123?
DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选,默认为 true)
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
DISCOURSE_SMTP_AUTHENTICATION: “plain”

我最后添加了后两个选项,但没有任何效果。

SMTP 服务器在我使用的所有测试工具中都能正常工作,例如在 Docker 容器内使用 openssl 或 swaks。

root@resources-app:/# swaks --to resources@xxx.net --server mail.xxx.net:587 -tls
=== 正在连接 mail.xxx.net:587...
=== 已连接到 mail.xxx.net。
<-  220 mail.xxx.net ESMTP Postfix (Ubuntu)
 -> EHLO resources-app
<-  250-mail.xxx.net
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-STARTTLS
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250-DSN
<-  250-SMTPUTF8
<-  250 CHUNKING
 -> STARTTLS
<-  220 2.0.0 Ready to start TLS
=== TLS 已启动,加密套件为 TLSv1.3:TLS_AES_256_GCM_SHA384:256
=== 未设置本地 TLS 证书
=== TLS 对等方 DN="/CN=*.xxx.net"
 ~> EHLO resources-app
<~  250-mail.xxx.net
<~  250-PIPELINING
<~  250-SIZE 10240000
<~  250-VRFY
<~  250-ETRN
<~  250-ENHANCEDSTATUSCODES
<~  250-8BITMIME
<~  250-DSN
<~  250-SMTPUTF8
<~  250 CHUNKING
 ~> MAIL FROM:<root@resources-app>
<~  250 2.1.0 Ok
 ~> RCPT TO:<resources@xxx.net>
<~  250 2.1.5 Ok
 ~> DATA
<~  354 End data with <CR><LF>.<CR><LF>
 ~> Date: Tue, 03 Aug 2021 11:04:12 +0000
 ~> To: resources@xxx.net
 ~> From: root@resources-app
 ~> Subject: test Tue, 03 Aug 2021 11:04:12 +0000
 ~> Message-Id: <20210803110412.593268@resources-app>
 ~> X-Mailer: swaks v20181104.0 jetmore.org/john/code/swaks/
 ~>
 ~> This is a test mailing
 ~>
 ~>
 ~> .
<~  250 2.0.0 Ok: queued as 1C4ED8AA
 ~> QUIT
<~  221 2.0.0 Bye
=== 与远程主机的连接已关闭。
1 个赞

此错误可能意味着您的 Postfix 配置中缺少 smtp_sasl_auth_enable = yes。请运行 postconf -n,查看输出中是否包含上述字符串。如果没有,请取消注释或编辑 /etc/postfix/main.cf 文件,然后反馈结果。

1 个赞

我确实配置了:
smtp_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous noplaintext
smtpd_tls_security_level = encrypt
smtpd_use_tls = yes

1 个赞

我认为上述两个选项是矛盾的。要使此功能正常工作,您需要在 Discourse 中设置正确的认证方法。

1 个赞

有道理,我不使用 SASL,所以设置了这些选项以增强安全性。
有哪些可用的方法?
另外,为什么 SASL 是强制性的?我之前将其禁用过,SMTP 在其他所有应用程序(如 Nextcloud 和 Thunderbird)中都能正常工作。

SASL 仅在向远程服务器发送邮件时需要,但此服务器仅用于本地。

谢谢。

1 个赞

我的理解可能有误,但我认为需要 SASL,因为 Docker 容器在逻辑上与运行 Postfix 的主机是分离的。

我建议你可以尝试降低 Postfix 的加固级别,看看哪种配置最适合你?

这个文件可以让你对这些设置有个大致了解:

discourse/config/discourse_defaults.conf at main · discourse/discourse · GitHub

1 个赞

那个默认文件并未包含所有可能的值,我在想是否有更安全的选项。稍后我会查看代码和库。

1 个赞

移除安全选项后问题仍未解决。
我需要在再次运行 discourse-doctor 之前先运行 launcher 应用的重建吗?

谢谢

1 个赞

注意那个 d

Discourse 实际上只需要以 smtp 开头的参数,而不需要 smtpd。

1 个赞

我只有
smtp_sasl_auth_enable = yes

没有其他限制……