我在 Django 中创建了一个“联系我们”表单,其中的 Django 部分似乎可以正常工作。但它生成的电子邮件发送失败,并显示
SMTPRecipientsRefused at /contact/
{'[email protected]': (553, b'5.7.1 <[email protected]>: Sender address rejected: not owned by user [email protected]')}
如果我更改 Django 设置以将电子邮件发送到控制台,它会在控制台中正确显示电子邮件。但是当我尝试将电子邮件发送到我的邮件服务器时,Postfix 似乎阻止了它。据我所知,这是为了防止某人从他们无法控制的电子邮件地址发送电子邮件,但在这种情况下,电子邮件是通过我构建的“联系我们”表单发送的。如果我在表单中输入与收件人相同的电子邮件地址,即[电子邮件保护],电子邮件确实到达了另一端。但如果我输入任何其他电子邮件地址作为 mail_from,就会抛出此错误。
我已经阅读过 Postfix 文档但它们仍然让我感到困惑,有人可以帮忙吗?
答案1
这条消息明确指出发件人地址被拒绝。因此实际上拒绝的不是收件人,而是发件人。SMTPRecipientsRefused
引发(可能令人困惑的)异常可能是因为服务器smtpd_delay_reject
启用,因此它将继续执行协议并且仅在RCPT TO
命令后报告拒绝,即使它在命令之后就决定拒绝交易MAIL FROM
。
由not owned by user ...
reject_sender_login_mismatch
(或reject_authenticated_sender_login_mismatch
)项位于 Postfix 配置中的某个位置,可能位于smtpd_sender_restrictions
其正常位置,但也可能位于smtpd_recipient_restrictions
或中smtpd_relay_restrictions
。这是一件好事,因为它大大增强了服务器对垃圾邮件的安全性。
因此,你的服务器似乎设置了 SMTP 身份验证,并且它还有一些映射从信封发件人地址到 SMTP 登录。某些发件人电子邮件地址只能由某些用户使用。您的应用程序似乎正在以用户的身份进行身份验证[email protected]
,并且不允许该用户用作[email protected]
发件人地址。
这里你必须小心,因为在电子邮件技术中,你可以将不同的内容称为“发件人地址”。在这种情况下,我们谈论的是“信封发件人地址”,该地址在命令中的 SMTP 会话期间报告给服务器MAIL FROM
。不要将其与From
MIME 标头中出现在消息数据中的“发件人”地址混淆。
您的选择是:
- 请求邮件服务器管理员允许
[email protected]
使用[email protected]
作为信封发件人地址; - 询问管理员该用户被允许使用哪个地址,然后重新配置您的应用程序以在 SMTP 会话期间使用允许的地址。
可能,该地址[email protected]
已允许用户[email protected]
使用。将其配置为在 SMTP 会话中使用。如果您希望接收对其他地址的回复,请将该地址作为Reply-To
MIME 标头添加到消息中。此外,您可能希望在消息的From
MIME 标头中使用其他地址。再次提醒,不要混淆“信封发件人地址”和From
MIME 标头。您可以相对自由地设置 MIME 标头,但信封发件人地址必须根据服务器配置进行设置。如何以及在何处设置取决于您的 SMTP 框架;我们无法帮助您。