搭建发送邮件服务器(SMTP)
必要条件
你的服务器必须要有一个固定(静态)的IP地址。IP地址不是保留IP地址(私有地址) 保留IP地址是什么?
你必须要有一个有效的域名(网址) 域名是什么?Domain Name是什么?
你的服务器产生的传出连接能到达其他服务器的25端口
以Linux为例。操作系统是64位的,CPU是X86架构的。操作系统是Debian 10 (buster)。在Debian 10上安装postfix和opendkim。所有的命令都以Root用户的身份运行。
检查你的服务器
检查系统版本
1.你可以输入以下命令查看发行版信息:
1 | cat /etc/issue |
2.查看CPU类型和操作系统内核版本
1 | uname -a |
检查25端口是否开放
1.安装telnet客户端程序
1 | apt install telnet -y |
2.用telnet命令检查25端口
1 | telnet smtp-mail.outlook.com 25 |
如果能看见 220
字样,说明你的服务器已经成功地主动连上outlook的邮件服务器。outlook的服务器正在用它的25端口来接受你的传入连接。
1 | ~# telnet smtp-mail.outlook.com 25 |
输入quit
四个字母可以退出telnet的界面。退出成功后,你能看见下面的内容
1 | quit |
如果输入telnet smtp-mail.outlook.com 25
后,看到“Connection timed out”字样,说明你服务器的传出连接无法到达其他邮件服务器的25端口。“Connection timed out”提示看起来像下面的样子:
1 | Trying 2603:1026:207:15::2... |
看到“Connection timed out”,你需要换一台服务器,或者需要找VPS提供商的客服申请开放25端口。
输入quit
退出telnet
1 | quit |
尝试解封25端口
1.你可以检查一下VPS提供商的云防火墙(安全组),看看有没有封锁25端口的规则,有的话删掉它们。
2.你可以输入 iptables -L
,检查一下本机的防火墙规则,看看有没有smtp
或 25
之类的字样,有的话删掉它们。删规则之前要想清楚,可能会带来安全问题。输入以下命令可删除本机上所有的防火墙规则:
1 | iptables -F |
设置PTR记录
修改PTR记录
以VPS提供商 Ramnode 为例。假如发送邮件服务器是 mail.ddd.com ,你服务器的IP地址是2.2.2.2 。在浏览器的地址栏里输入 https://ramnode.com/
,点击右上角的“Login”。输入账号密码登录网页版的后台,点击“Access Control Panel”进入控制面板。点击屏幕左上角“Cloud“,再点击屏幕左上角的“Instances”,接着点击“Name”下面的区域,点击“INFO”,点击“Get PTR”,在“PTR”一栏下输入 ddd.com
,最后点击“SAVE PTR”。等上半小时再做下一步。
检查PTR记录是否生效
1.安装DNS相关的工具
1 | apt install dnsutils -y |
2.检查服务器的PTR记录
1 | dig -x 2.2.2.2 |
如果能在“ANSWER SECTION:”下方看到“ PTR mail.ddd.com. ”,说明PTR记录修改成功了
1 | ~# dig -x 2.2.2.2 |
修改系统设置
假设发送邮件服务器是 mail.ddd.com ,你的根域名是 ddd.com
修改主机名
1.显示主机名(hostname)
1 | hostname |
2.修改主机名(hostname)
1 | hostnamectl set-hostname ddd.com |
修改hosts文件
用文本编辑器修改文件hosts
1 | nano /etc/hosts |
可以参考下面进行修改:
1 | 127.0.0.1 localhost |
修改mailname
清空文件mailname
1 | cat /dev/null > /etc/mailname |
安装相关软件
以电子邮件服务端(mail server)Postfix 为例 。假设发送邮件服务器是 mail.ddd.com ,你的根域名是 ddd.com
1.删除Debian自带的exim4
1 | apt-get --purge remove exim4 exim4-base |
1 | dpkg -l | grep exim |
1 | dpkg -P exim_* |
2.安装邮件服务端程序Postfix和垃圾邮件过滤器OpenDKIM
1 | apt install -y postfix opendkim opendkim-tools |
按一下Tab键,选中 <OK>
,按一下Enter键。按方向键↑和方向键↓移动光标,选中“Internet Site”,按一下Enter键。输入 ddd.com
,按一下Tab键,选中 <OK>
。
调整Postfix的设置
1.用文本编辑器修改postfix的配置文件。Postfix被设定成只能发邮件不能收邮件
1 | nano /etc/postfix/main.cf |
打开文件,按方向键↓,使画面向下滚动,可参考下面的内容进行修改。…代表两行中间有被省略的内容。#号后面的内容只是注释,可以不写。
1 | ... |
2.重启postfix
1 | systemctl restart postfix |
3.检查postfix的运行状况
1 | systemctl status postfix |
如果能看见“active (exited)”字样,说明postfix已正常启动。如果有红字,请检查一下postfix的配置文件,它位于/etc/postfix/main.cf
,看看有没有写错。可以按 CTRL + C
组合键退出systemctl的界面。
调整Opendkim的设置
1.用文本编辑器修改opendkim的配置文件
1 | nano /etc/opendkim.conf |
可参考下面修改:
1 | # This is a basic configuration for signing and verifying. It can easily be |
2.为你的域名(ddd.com)生成密钥对。密钥对由一个公钥和一个私钥组成。-s 是 Selector(过滤器) 的名字。-d 是 Domain(域名),用来告诉别人邮件是从哪一台电脑发出来的。
1 | sudo -u opendkim opendkim-genkey -D /etc/dkimkeys -d ddd.com -s ddd |
上面的命令将在目录 /etc/dkimkeys 下创建两个新的文件,分别 ddd.private 和 ddd.txt 。私钥在文件 ddd.private 里。公钥在文件 ddd.txt 里。
3.重启opendkim
1 | systemctl restart opendkim |
4.用文本编辑器修改Postfix的配置文件
1 | nano /etc/postfix/main.cf |
在文件末尾添加下面两行内容
1 | smtpd_milters = inet:localhost:8891 |
5.重新载入postfix
1 | systemctl reload postfix |
修改DNS记录
以DNS托管服务商 Cloudflare 为例。假设你服务器的IPv4地址是2.2.2.2 ,你的主域名(Primary Domain)是 ddd.com ,你的邮件服务器是 mail.ddd.com
1.添加一条A记录:
1 | 类型 名称 IPv4地址 TTL 代理状态 |
2.添加一条MX记录:
1 | 类型 名称 邮件服务器 TTL 优先级 |
3.添加一条SPF记录:
1 | 类型 名称 TTL 内容 |
4.设置DKIM记录:
查看文件ddd.txt
1 | cat /etc/dkimkeys/ddd.txt |
( “ “)内的内容就是DKIM记录。
添加DKIM记录
1 | 类型 名称 TTL 内容 |
xxxx是一串长长的数字和字母,中间没有双引号,记得删掉多余的双引号 。
5.添加DMARC记录:
1 | 类型 名称 TTL |
1 | 内容 |
其中 example@outlook.com 是你的邮箱地址
6.等DNS记录自动生效。等半小时后再做下一步。
发送测试邮件
1.安装电子邮件客户端mailutils。mailutils可以帮我们写邮件,也可以帮我们把邮件传给postfix。
1 | apt-get install mailutils |
2.输入命令发送邮件。 其中 userx@example.com 是你另一个邮箱的地址
1 | mail userx@example.com |
1 | user@mail:~# mail userx@example.com |
其中 Subject 是邮件的主题,Subject 下面的区域是邮件的正文。输入主题和正文后,按Ctrl+D
来发送邮件。
3.打开你另一个邮箱看看有没有收到邮件。如果迟迟收不到邮件,可以检查一下日志文件 mail.log
,文件 mail.log
在/var/log/mail.log
一切顺利的话,你的服务器现在有能力发邮件了,只是还不能收邮件而已。