1、在/etc/postfix/main.cf中:
mydestination表示的是postfix需要处理的域名(发件人的域名)
virtual_mailbox_domains是dovecot处理的发件人域名。
mydestination和virtual_mailbox_domains的域名不能重复,就是不能让postfix处理,又让dovecot处理。
2、myorigin是本地发送邮件的时候添加的域名。如果你的本机hostname是abcd,myorigin=efd.com那么mail发送邮件,发件人将是abcd@efd.com
3、relay_domains = 为空。如果你仅有一台邮件服务器。这个是设置一些域名为relay_domains定义的邮件,将通过relay_hostname指定的机器来发送。
4、下面这两行,是一个坑。网上教程多是下面这样的,5000是自己创建的vmail用户的uid和gid:
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
不可以使用root用户以及root组的用户来执行(dovecot限制了)
实际需要改为:
virtual_uid_maps = hash:/etc/postfix/virtual_uids
virtual_gid_maps = hash:/etc/postfix/virtual_gids
原因是,这条命令的意思,需要postfix在将邮件存储到虚拟邮箱的时候,使用的用户是哪个。如果是用 static:5000,那么就是指定使用vmail用户。这样当你用邮箱客户端登陆的获取邮件的时候,就会权限出错。因为通过IMAP登录获取邮件的用户是登录用户。登录用户和存储用户vmail不一致,当然就读取不了。所以需要根据邮箱的用户来存储收到的邮件。这坑居然花了我一个天。
virtual_uids和virtual_gids的文件格式是:用户 ID 如下面:
abcd@efd.com 5001
1234@efd.com 5002
5、virtual_mailbox_maps = hash:/etc/postfix/vmailbox
这个是用户和指定邮箱文件路径的匹配。其他地方也指定了。不知是什么原因需要多个地方指定,格式如下,用户 用户邮箱路径
root@efd.com efd.com/root/
然后需要命令postmap /etc/postfix/vmailbox 生成校验的文件
6、下面这个设置:
smtpd_sender_restrictions = reject_sender_login_mismatch,
check_sender_access hash:/etc/postfix/sender_access,
permit_mynetworks,
reject_unauth_pipelining,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit_sasl_authenticated,
reject
文件/etc/postfix/sender_access可以用于定义需要除了设定域名以外的发件人域名,允许接入。比如发件人是abcd@tdfsda.com,正常上面的接入是不可以的。但是你在sender_access文件中加上 tdfsda.com ok, 那么就可以postfix或dovecot就可以允许接入和处理。
7、sender_canonical_maps = hash:/etc/postfix/sender_canonical 这个是mail发邮件的时候将发件人root@abcd的格式 转换成对应的格式。
8、在/etc/dovecot/dovecot.conf的配置中,需要指定邮箱的根目录:
mail_location = maildir:/var/mail/vhosts/%d/%n/Maildir
(你看这里再次指定,不知道为何。%d 表示收件人@后面的域名,%n是@前面的用户名)
9、smtpd_sender_login_maps = hash:/etc/postfix/sender_login_maps
是smtp接入时,提供的登录用户名的转换。格式是:接入的用户名 需要转换的用户名
abcd@efd.com abcd@efd.com
也需要postmap /etc/postfix/sender_login_maps 进行校验转换
10、在/etc/dovecot/conf.d/10-auth.conf文件是整个登录的鉴权设置,包括postfix创建的SMTPD服务器的接入鉴权。和postfix需要smtp去连其他服务输入用户名密码的设置不是一样的。(之前这个差点被整蒙了,看清楚SMTPD和SMTP,一个是本机的SMTP的后台服务设置,一个是postfix连其他服务器的SMTP的连接设置)
passdb {
driver = passwd-file
args = /etc/dovecot/users
}
userdb {
driver = passwd-file
args = /etc/dovecot/users
default_fields = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
再一次定义邮件路径,为何我也不知道。uid=vmail gid=vmail 表示使用vmail去读写这些邮件目录
这里有个坑,就是文件/etc/dovecot/users的用户,必须是服务器的用户。否则passdb可以通过,userdb通过不了,日志会显示找不到用户。
创建用户需要用命令:
useradd abcd@efd.com
并且需要将用户加入到vmail的组中,否则/var/mail/vhosts/%d/%n的邮箱地址显示该用户没有权限,拒绝接入。
加入组的命令:sudo usermod -aG vmail abcd@efd.com
/etc/dovecot/users文件内容的格式是:用户:{PLAIN}password
abcd@efd.com:{PLAIN}nidemima
11、/etc/dovecot/conf.d/10-mail.conf中这两行一定要有,而且格式不能变。
mail_home = /var/mail/vhosts/%d/%n
mail_location = maildir:~/Maildir
(为啥再一次指定邮箱路径?晕倒)否则不会为邮箱创建目录,找不到目前就不给接入。
12、证书指定:
ssl = yes
ssl_cert = </etc/letsencrypt/live/efd.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/efd.com/privkey.pem
建议指定一下ca文件,否则可能有证书验证错误的问题:
ssl_ca = </etc/letsencrypt/live/efd.com/chain.pem
12、/etc/dovecot/conf.d/10-master.conf中对运行imap的用户指定:
service imap {
user = vmail
}
13、#下面这条命令是确保25端口使用tls,否则对方如gmail会提醒是非加密邮件
smtp_tls_security_level = dane
14、虚拟邮箱路径,后面不要有/,否则多一个斜杠,就会出现/home//user,这种情况,就会说创建不了文件的错误。
virtual_mailbox_base = /home
15、如你的服务器是局域网内的一台机器。不要用iptables来转发流量,因为SNAT的方式,会导致丢失流量的源IP地址。就是邮件服务器只是看到你的网关的ip。这样postfix就认为是回环了。出现 mail loops back to myself 的错误。当你将局域网ip段加入到mynetworks的时候。
这些坑,对于初学者的我,花了好几天的时间才琢磨出来。一个地方错误,都得研究半天。供大家参考。
如果需要增加邮箱的别名
比如* abc@abc.com 的地址等于abc@abc.com
那么需要增加一个文件:/etc/postfix/virtual_maps,里面增加一行:
/^.*abc@abc\.com$/ abc@abc.com
然后在/etc/postfix/main.cf中,增加一行:
virtual_alias_maps = regexp:/etc/postfix/virtual_maps
没有评论:
发表评论