使用ubuntu搭建公网个人邮件服务器(基于postfix,dovecot,mysql)

2019-09-23 08:50:32于海丽

生成 ssl 证书

生成 ssl 证书可参考这一篇https://www.jb51.net/article/60371.htm ,假设证书存放地址为:

公钥 /etc/letsencrypt/live/test.com/fullchain.pem; 私钥 /etc/letsencrypt/live/test.com/privkey.pem;

配置 postfix

首选备份 postfix 的默认配置文件,然后编辑main.cf

cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
vim /etc/postfix/main.cf

注释下面的配置:


然后加入如下的配置:

# 使用自己的ssl证书
smtpd_tls_cert_file=/etc/letsencrypt/live/test.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/test.com/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
# 使用dovecot来做身份认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

修改 myhostname,myorigin 为如下的值:

myhostname = test.com
myorigin = $myhostname

修改 mydestination 值为 localhost,以启动 mysql 中的虚拟域。:

mydestination = localhost

在配置文件的最后加入以下行,确保将邮件投递给 mysql 表中列出的虚拟域。

virtual_transport = lmtp:unix:private/dovecot-lmtp

最后加入以下三项参数,告知 Postfix 配置虚拟域、用户和别名

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

接下来创建上面最后加入的三项参数对应的文件。

创建/etc/postfix/mysql-virtual-mailbox-domains.cf,内容如下:

user = admin
password = 123456
port = 3306
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

接着重启 postfix,并测试 postfix 能否找到域,如果成功返回 1:

service postfix restart
postmap -q test.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

创建/etc/postfix/mysql-virtual-mailbox-maps.cf,内容如下:

user = admin
password = 123456
port = 3306
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'

接着重启 postfix,并测试其能否找到邮箱地址,成功返回 1:

service postfix restart
postmap -q first@test.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

最后创建/etc/postfix/mysql-virtual-alias-maps.cf,内容如下:

user = admin
password = 123456
port = 3306
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'