后缀NOQUEUE:拒绝来自未知的RCPT

我构build了一个基于Web的应用程序,但是当它尝试发送电子邮件时,它失败了。 Postfix在它的mail.log中logging以下内容:

postfix/smtpd[22261]: warning: hostname srv.eastinc.nl does not resolve to address 192.168.3.101 postfix/smtpd[22261]: connect from unknown[192.168.3.101] postfix/smtpd[22261]: NOQUEUE: reject: RCPT from unknown[192.168.3.101]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<domain.eastinc.nl> postfix/smtpd[22261]: disconnect from unknown[192.168.3.101] 

我很确定srv.eastinc.nlparsing为192.168.3.101,因为nslookup这样说。 后缀configuration:

 alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no config_directory = /etc/postfix delay_warning_time = 2h home_mailbox = Maildir/ inet_interfaces = all mailbox_size_limit = 0 mydestination = eastinc.nl, mail.eastinc.nl, srv.eastinc.nl, localhost.eastinc.nl, localhost myhostname = mail.eastinc.nl mynetworks = localhost 192.168.3.101 127.0.0.1 srv.eastinc.nl myorigin = /etc/mailname readme_directory = no recipient_delimiter = + relayhost = smtp.ziggo.nl:25 smtp_always_send_ehlo = yes smtp_sasl_auth_enable = no smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination smtpd_sender_restrictions = reject_unknown_sender_domain smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem smtpd_tls_key_file = /etc/ssl/private/mail.key smtpd_tls_protocols = !SSLv2, !SSLv3 smtpd_tls_security_level = may smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_use_tls = yes 

如果我理解正确,192.168.3.101和srv.eastinc.nl应该能够通过Postfix中继邮件。 任何想法如何得到这个工作?

你的configuration有以下限制:

 smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination smtpd_sender_restrictions = reject_unknown_sender_domain 

permit_sasl_authenticated

通过RFC 4954(AUTH)协议成功validation客户端时允许请求。

reject_unauth_destination

拒绝请求,除非下列条件之一成立:

  • Postfix是邮件转发器:已parsing的RCPT TO域匹配$ relay_domains或其子域,并且不包含发件人指定的路由(user @ others @ domain),

  • Postfix是最终目的地:已parsing的RCPT TO域与$ mydestination,$ inet_interfaces,$ proxy_interfaces,$ virtual_alias_domains或$ virtual_mailbox_domains相匹配,并且不包含发件人指定的路由(user @ others @ domain)。

reject_unknown_sender_domain

当Postfix不是发件人地址的最终目的地时,拒绝请求,并且MAIL FROM域具有1)没有DNS MX和没有DNS Alogging,或者2)格式不正确的MXlogging,例如具有零长度MX主机名的logging后缀版本2.3和更高版本)。

该回复是使用unknown_address_reject_code参数(默认值:450),unknown_address_tempfail_action(默认值:defer_if_permit)或550(nullmx,Postfix 3.0和更高版本)指定的。 有关详细信息,请参阅各自的参数说

所以,我的猜测是:谁连接从192.168.3.101主机(是它自己的服务器?)发送邮件没有身份validation(没有关于身份validation在日志中)。 所以你需要下面的限制来做到这一点:

permit_mynetworks

当客户端IP地址与$ mynetworks中列出的任何networking或networking地址匹配时,允许请求。

使用permit_mynetworks预先smtpd_recipient_restrictions permit_mynetworks

 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination 

官方文档:ACCESS README

UDP

有时它真的不好permit_mynetworks因为从$mynetworks 任何主机可以提交邮件没有身份validation。

所以最好通过你的应用程序使用auth来提交邮件,而不要使用sendmail()/mail()函数