端口
- 25 (SMTP)
- 110 (POP3,禁用,只允许加密POP3连接)
- 143 (IMAP,禁用,只允许加密IMAP连接)
- 465 (SMTPS)
- 587 (SMTP STARTTLS)
- 993 (IMAPS)
- 995 (POP3S)
修改本机名和添加解析
假设邮箱域名为
demo.com
,本台服务器域名A解析为mx.demo.com
修改/etc/hostname
mx
修改/etc/hosts
127.0.0.1 mx.example.com mx localhost
重启服务器
开始安装
参考具体配置https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql/
git clone https://github.com/LeoBest2/ubuntu16-mail.git
cd ubuntu16-mail
python mail.py
# python3 mail.py
本配置不同处
# 对于发件人为本域用户,强制必须通过sasl加密认证,
# /etc/postfix/main.cf
smtpd_sender_restrictions =
# 如果通过了sasl认证,则接受邮件到下一个判别规则 smtpd_recipient_restrictions =
permit_sasl_authenticated,
# 第一条不符合的情况下(说明用户发送的邮件是直接通过25端口没经过SASL认证),检查/etc/postfix/access规则
# 该文件内容为来自demo.com的都拒绝掉
check_sender_access hash:/etc/postfix/access,
# 拒绝掉已经登陆的,但是发件人和登陆身份不一致的邮件
reject_sender_login_mismatch,
# /etc/postfix/access
demo.com REJECT
配置mysql密码,稍后提示输入
配置postfix域名
安装完毕重启
netstat -atnp 查看各服务启动正常
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1383/master
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 1197/dovecot
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 1197/dovecot
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1191/mysqld
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 1383/master
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 1383/master
foxmail配置
添加邮件地址
INSERT INTO `mailserver`.`virtual_users`
(`domain_id`, `password` , `email`)
VALUES
('1', ENCRYPT('newpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))) , 'email3@demo.com');
大致工作原理
http://www.postfix.org/OVERVIEW.html
书籍postfix权威指南
Postfix 接受邮件
- smtpd从网络接受
- qmqpd(Quick Mail Queuing Protocol)从网络接受
- 本地提交
postfix 投递邮件
- smtp 转发到其他服务器
- lmtp 递交给MDA(如dovecot)
- local, virtual, pipe(不太了解)
postfix 接受/转发控制
smtpd_helo_restrictions =
smtpd_sender_restrictions =
smtpd_recipient_restrictions =
smtpd_end_of_data_restrictions =
.......
postfix, dovecot联系
# postfix 通过dovecot认证发送用户
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
# 对应dovecot 10-master.conf
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
# postfix投递出邮件通过lmtp协议交由dovecot存放
virtual_transport = lmtp:unix:private/dovecot-lmtp
# 对应dovecot 10-master.conf
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
postfix与mysql联系
# 查询虚拟域名,用户,别名
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-virtual-email2email.cf
dovecot与mysql联系
# 认证用户
# /etc/dovecot/dovecot-sql.conf.ext
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
其他问题
日志文件/var/log/mail.log
删除用户邮箱
rm -rf `doveadm user -f home email1@demo.com`
设置域名解析
配置webmail
反垃圾邮件,病毒扫描
确保25端口没有被屏蔽