我有一台服务器,我想设置一个邮件服务器,以便我从我的域接收和发送电子邮件。我目前遇到一个问题,我无法接收邮件。发送电子邮件工作正常。
我将使用这个脚本,它展示了如何使用 Postfix、Dovecot 和 Postgresql 作为后端来配置邮件服务器(https://gist.github.com/solusipse/7ed8e1da104baaee3f05)。
/etc/postfix/main.cf:
relay_domains =
virtual_alias_maps = proxy:pgsql:/etc/postfix/virtual_alias_maps.cf
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/virtual_mailbox_domains.cf
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/virtual_mailbox_maps.cf
virtual_mailbox_base = /home/vmail
virtual_mailbox_limit = 512000000
virtual_minimum_uid = 5000
virtual_transport = virtual
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
local_transport = virtual
local_recipient_maps =
transport_maps = hash:/etc/postfix/transport
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options =
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/private/server.crt
smtpd_tls_key_file = /etc/ssl/private/server.key
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes
smtpd_tls_loglevel = 1
html_directory = /usr/share/doc/postfix/html
queue_directory = /var/spool/postfix
mydestination = localhost
/etc/dovecot/dovecot.conf:
protocols = imap
auth_mechanisms = plain
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
user = root
}
mail_home = /home/vmail/%d/%u
mail_location = maildir:~
ssl_cert = </etc/ssl/private/server.crt
ssl_key = </etc/ssl/private/server.key
/var/logs/mail.log:
Apr 17 19:46:18 v22015072919626549 postfix/smtpd[8837]: connect from ***
Apr 17 19:46:18 v22015072919626549 postfix/smtpd[8837]: 62D6A3E0DC9: client=***
Apr 17 19:46:18 v22015072919626549 postfix/cleanup[8843]: 62D6A3E0DC9: message-id=***
Apr 17 19:46:18 v22015072919626549 postfix/smtpd[8837]: disconnect from ***
Apr 17 19:46:18 v22015072919626549 postfix/qmgr[9001]: 62D6A3E0DC9: from=<***>, size=1160, nrcpt=1 (queue active)
Apr 17 19:46:18 v22015072919626549 postfix/virtual[8844]: 62D6A3E0DC9: to=<***>, relay=virtual, delay=0.05, delays=0.01/0.01/0/0.02, dsn=2.0.0, status=sent (delivered to maildir)
Apr 17 19:46:18 v22015072919626549 postfix/qmgr[9001]: 62D6A3E0DC9: removed
答案1
4 月 17 日 19:46:18 v22015072919626549 postfix/virtual[8844]: 62D6A3E0DC9: to=<***>,relay=virtual,delay=0.05,delays=0.01/0.01/0/0.02,dsn=2.0.0,status=sent(已传送至 maildir)
Postfix 正在发送邮件某处但我们还不知道在哪里。
我无法接收邮件。发送电子邮件功能正常。
所以你确定 Postfix 能发送邮件吗Dovecot 正在寻找什么?
电子邮件做存储在某个地方;日志摘录清楚地说明了这一点。根据 Postfix 网站上的手册页,虚拟(8)将邮箱路径名构造为$virtual_mailbox_base/$virtual_mailbox_maps(recipient)
“其中接受者是完整的收件人地址。”。virtual_mailbox_base来自postfix.cf并且在您的配置中设置为/home/vmail
,并且您的virtual_mailbox_maps
设置看起来也相当有效(如果问题出在这里,您可能会看到 Postfix 对此抱怨)。
这反映在 Dovecot 的配置中mail_home = /home/vmail/%d/%u
。但在 Dovecot 中,您还环境mail_location = maildir:~
。
基于虚拟用户/主页和邮件位置在 Dovecot Wiki 上,这似乎意味着 Dovecot 正在寻找“qmail 样式”(也称为 Maildir)cur
,new
并且tmp
直接位于 /home/vmail/something/something 下。那是你的Postfix虚拟邮箱图是否配置为向收件人发送电子邮件?
您应该仔细检查这两个配置是否同步。我猜它们不同步,这导致两款软件(实际上它们之间几乎没有任何关系)使用不同的 maildir 位置。这可以解释为什么两者都声称一切正常,但他们对现实的看法却不同。
有可能打开不要删除可以帮助您诊断此问题,方法是让 Postfix 在最终投递完成后将邮件假脱机文件留在磁盘上。(邮件假脱机文件通常在成功投递后被删除。)
答案2
您是否尝试过从另一台机器直接通过端口 25 远程登录到您的服务器?最常见的错误之一是阻止iptables
传入tcp/25
。如果被拒绝,您只需要允许传入tcp/25
通过iptables
。