我知道这里有很多类似的问题,但没有人帮助我。
所以我有一个Debian 7.0服务器与后缀和dovecot工作与自签名证书。 当我通过SSH连接到服务器时,我可以使用telnet将电子邮件发送到其他服务器,但是我无法通过Thunderbird客户端发送电子邮件,并显示以下错误消息:
发送邮件时发生错误。 邮件服务器回应:
5.7.1:中继访问被拒绝。 请检查邮件收件人[email protected]并重试。
首先,我的ISP阻止端口25,所以我使用这样的端口465: 
以下是我在setup上编辑过的master.cf的一部分:
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - - - - smtpd #smtp inet n - - - 1 postscreen #smtpd pass - - - - - smtpd #dnsblog unix - - - - 0 dnsblog #tlsproxy unix - - - - 0 tlsproxy submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth smtps inet n - - - - smtpd
这是我的main.cf:
myhostname = mail.server.com myorigin = /etc/mailname mydestination = mail.server.com, server.com, localhost, localhost.localdomain relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases smtpd_tls_cert_file=/etc/ssl/certs/mailcert.pem smtpd_tls_key_file=/etc/ssl/private/mail.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 smtpd_tls_protocols = !SSLv2, !SSLv3 smtpd_tls_security_level = may smtp_tls_security_level = may smtp_tls_loglevel = 1 smtpd_tls_loglevel = 1 local_recipient_maps = proxy:unix:passwd.byname $alias_maps inet_protocols = all
这是我的dovecot.conf:
disable_plaintext_auth = no mail_privileged_group = mail mail_location = mbox:~/mail:INBOX=/var/mail/%u userdb { driver = passwd } passdb { args = %s driver = pam } protocols = " imap" service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } } ssl=required ssl_cert =< /etc/ssl/certs/mailcert.pem ssl_key =< /etc/ssl/private/mail.key
最后,当错误发生时,我的mail.log的内容:
Nov 14 13:17:24 Test postfix/smtpd[10720]: connect from 49-3-134-95.pool.ukrtel.net[95.134.3.49] Nov 14 13:17:25 Test postfix/smtpd[10720]: Anonymous TLS connection established from 49-3-134-95.pool.ukrtel.net[95.134.3.49]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits) Nov 14 13:17:25 Test postfix/smtpd[10720]: NOQUEUE: reject: RCPT from 49-3-134-95.pool.ukrtel.net[95.134.3.49]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.0.101]> Nov 14 13:17:30 Test postfix/smtpd[10720]: disconnect from 49-3-134-95.pool.ukrtel.net[95.134.3.49]
我该怎么办才能解决这个问题?
================更新====================
阅读http://www.postfix.org/SASL_README.html和http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL这里是我做的改变:
新的master.cf:
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_sasl_local_domain=$myhostname smtps inet n - - - - smtpd
添加到main.cf中:
smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes
添加到dovecot.conf中:
auth_mechanisms = plain login
仍然没有运气,当我尝试发送一封信时,我得到完全相同的错误。
问题是你没有通过SASLvalidation。
你有这个提交集:
-o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
第一个允许我的networking(这似乎是本地主机),第二个允许onyauthentication的用户。 您的日志显示您build立一个匿名TLS连接,但没有SASLauthentication。
我没有看到你的main.cf中有任何SASLconfiguration,你可能想看看这个 。
正如NickW所说,您的configuration只允许您从mynetworks中的主机匿名发送邮件,并从其他位置进行身份validation。
所以你有两个解决scheme: