远程服务器上的 Postfix SMTP 响应 554 Relay Access Denied for rcpt(收件人)。在 'localhost' smtp 服务器上工作正常
Postfix SMTP on Remote Server Responds 554 Relay Access Denied for rcpt (recipient). Works okay on 'localhost' smtp server
我正在尝试通过远程虚拟机 运行 postfix
作为 smtp 服务器发送电子邮件。
但是,我在发送 rcpt
命令时收到 554 - Relay access denied
错误。
(554, b'5.7.1 <xxxxx@xyz.org>: Relay access denied')
我知道它拒绝了我试图设置为收件人的电子邮件地址,但我不明白为什么。
套接字连接本身建立良好,我可以在尝试 rcpt
.
之前发送 mail
命令
环境详细信息:
主机:
Windows 7 machine / Language: Python 3.
来宾虚拟机:
Docker container (Ubuntu) VM running postfix
, ssh
-- with dhcp-assigned ip address 10.35.50.166
.
这是 python
代码 运行:
(在主机上):
import smtplib
server = smtplib.SMTP(host='10.35.50.166', port=8025)
server.mail('xxxxx@xyz.org')
(250, b'2.1.0 Ok')
server.rcpt('xxxxx@xyz.org')
(554, b'5.7.1 <xxxxx@xyz.org>: Relay access denied')
运行从客机,错误没有发生:
import smtplib
server = smtplib.SMTP(host='localhost', port=8025)
server.mail('xxxxx@xyz.org')
(250, b'2.1.0 Ok')
server.rcpt('xxxxx@xyz.org')
(250, b'2.1.5 Ok')
Postfix 服务器 main.cf 中将出现配置错误,因为您的本地网络未设置为允许中继。
你需要这样的东西
Localnetworks=0.0.0.0/24(你的网络或ip是客机)
Ubuntu 上的 Postfix 默认配置仅允许在本地接口(即 localhost)上进行中继访问。在其他接口(VM 网络)上连接时,需要 SMTP 身份验证。
因此您可以为您的 SMTP 调用添加身份验证或将您的主机 IP 添加到允许的中继网络。
要实现后者,请在您的 /etc/postfix/main.cf
文件中找到读取
的行
mynetworks = 127.0.0.0/8
并将其更改为
127.0.0.0/8,10.0.0.0/8
然后用
重新加载后缀
sudo postfix reload
编辑:
或者,您可以将 mynetworks_style
设置设置为
mynetworks_style = subnet
问题已解决。这是我现在使用的配置。由于 itchee
.
,mynetworks
指令出现问题
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = localhost
#myorigin = $mydomain
#relayhost = $mydomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localdomain, localhost, localhost.localdomain, localhost
relayhost =
#mynetworks = 127.0.0.0/8 [::]/128 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks = 127.0.0.0/8 10.0.0.0/8 172.0.0.0/8 [::]/128 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
#inet_interfaces = localhost
我正在尝试通过远程虚拟机 运行 postfix
作为 smtp 服务器发送电子邮件。
但是,我在发送 rcpt
命令时收到 554 - Relay access denied
错误。
(554, b'5.7.1 <xxxxx@xyz.org>: Relay access denied')
我知道它拒绝了我试图设置为收件人的电子邮件地址,但我不明白为什么。
套接字连接本身建立良好,我可以在尝试 rcpt
.
mail
命令
环境详细信息:
主机:
Windows 7 machine / Language: Python 3.
来宾虚拟机:
Docker container (Ubuntu) VM running
postfix
,ssh
-- with dhcp-assigned ip address10.35.50.166
.
这是 python
代码 运行:
(在主机上):
import smtplib
server = smtplib.SMTP(host='10.35.50.166', port=8025)
server.mail('xxxxx@xyz.org')
(250, b'2.1.0 Ok')
server.rcpt('xxxxx@xyz.org')
(554, b'5.7.1 <xxxxx@xyz.org>: Relay access denied')
运行从客机,错误没有发生:
import smtplib
server = smtplib.SMTP(host='localhost', port=8025)
server.mail('xxxxx@xyz.org')
(250, b'2.1.0 Ok')
server.rcpt('xxxxx@xyz.org')
(250, b'2.1.5 Ok')
Postfix 服务器 main.cf 中将出现配置错误,因为您的本地网络未设置为允许中继。
你需要这样的东西
Localnetworks=0.0.0.0/24(你的网络或ip是客机)
Ubuntu 上的 Postfix 默认配置仅允许在本地接口(即 localhost)上进行中继访问。在其他接口(VM 网络)上连接时,需要 SMTP 身份验证。
因此您可以为您的 SMTP 调用添加身份验证或将您的主机 IP 添加到允许的中继网络。
要实现后者,请在您的 /etc/postfix/main.cf
文件中找到读取
mynetworks = 127.0.0.0/8
并将其更改为
127.0.0.0/8,10.0.0.0/8
然后用
重新加载后缀sudo postfix reload
编辑:
或者,您可以将 mynetworks_style
设置设置为
mynetworks_style = subnet
问题已解决。这是我现在使用的配置。由于 itchee
.
mynetworks
指令出现问题
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = localhost
#myorigin = $mydomain
#relayhost = $mydomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localdomain, localhost, localhost.localdomain, localhost
relayhost =
#mynetworks = 127.0.0.0/8 [::]/128 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks = 127.0.0.0/8 10.0.0.0/8 172.0.0.0/8 [::]/128 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
#inet_interfaces = localhost