有时候为了发送一定量的邮件,而使用类似QQ邮箱这样厂商的产品就会受到各种限制。 为此,需要自己搭建个简易的发邮件的服务器。需求很简单:服务器只需要能发邮件, 不需要接收邮件,且发邮件可以使用 smtp
登陆验证来使用。
安装MTA服务器 我的VPS是 centos7
,系统自带了 postfix
,然后还需要安装 sasl
, 这个是为了实现 smtp
验证必备的软件。
如果你的服务器上没有 postfix
,而是 sendmail
,你需要先卸载再安装。
1 2 rpm -e sendmail yum install postfix
配置DNS 我用的是DNSPOD,要配置的域名为 mypi.win
,也就是我希望发邮件的地址是[email protected]
。需要在DNSPOD做以下三条配置
其中 SPF
配置中的内容为 v=spf1 a mx ip4:x.x.x.x -all
,把其中的x.x.x.x
换成你的服务器IP,也就是你的主域名指向的IP。
SPF
的作用是为了降低邮件被识别为垃圾邮件的概率,配置好以后,可以去这里 测试下是否配置正确了。
配置postfix 修改 /etc/postfix/main.cf
的内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ##将下面的配置项注释取消,后面填上合适值## myhostname = mypi.win #大约在75行,postfix主机名,修改成你的域名 此项需要添加A记录并指向postfix所在主机公网IP mydomain = mypi.win #大约在83行,后面为主机域名 myorigin = $mydomain #大约在100行,设置postfix邮箱的域名后缀为$mydomain,即mypi.win inet_interfaces = localhost #大约在117行 #指定postfix系统监听的网络接口 此处必须是localhost或127.0.0.1或内网ip #若注释或填入公网ip 服务器的25端口将对公网开放 #默认值为all 即监听所有网络接口 #此项指定localhost后 本机postfix就只能发邮件不能接收邮件 inet_protocols = ipv4 #大约在120行,指定网络协议 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain #大约在165行 #指定postfix接收邮件时收件人的域名,换句话说,也就是你的postfix系统要接收什么样的邮件。 #此项配置中$myhostname表示postfix接受@$myhostname为后缀的邮箱的邮件 逗号分割支持指多项 #此项默认值使用myhostname local_recipient_maps = #此项制定接收邮件的规则 可以是hash文件 此项对本次配置无意义 可以直接注释 mynetworks = x.x.x.x, 172.17.0.1, 127.0.0.1 #大约在266行 #指定你所在的网络的网络地址 #本服务器的公网IP x.x.x.x、内网ip 172.17.0.1、以及localhost的ip127.0.0.1 #请依据实际情况修改 smtpd_banner = ETY001 Steemit Mention Server #大约在571行 #指定MUA通过smtp连接postfix时返回的header头信息 #SMTP Config broken_sasl_auth_clients = yes #指定postfix兼容MUA使用不规则的smtp协议--主要针对老版本的outlook 此项对于本次配置无意义 smtpd_client_restrictions = permit_sasl_authenticated #指定可以向postfix发起SMTP连接的客户端的主机名或ip地址 #此处permit_sasl_authenticated意思是允许通过sasl认证(也就是smtp链接时通过了账号、密码效验的用户)的所有用户 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination #发件人在执行RCPT TO命令时提供的地址进行限制规则 此处照搬复制即可 smtpd_sasl_auth_enable = yes #指定postfix使用sasl验证 通俗的将就是启用smtp并要求进行账号、密码效验 smtpd_sasl_local_domain = $mydomain #指定SMTP认证的本地域名 本次配置可以使用 smtpd_sasl_local_domain = '' 或干脆注释掉 默认为空 smtpd_sasl_security_options = noanonymous #取消smtp的匿名登录 此项默认值为noanonymous smtp若能匿名登录危害非常大 此项请务必指定为noanonymous message_size_limit = 5242880 #指定通过postfix发送邮件的体积大小 此处表示5M
配置 SMTP 配置 postfix
启用 sasldb2
的账号密码验证方式:
1 2 3 4 5 6 vim /etc/sasl2/smtpd.conf #向这个文件写入如下的内容(这个文件的路径为64位系统的,如果是32位系统应该在/usr/lib/sasl2/smtpd.cof) pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: plain login CRAM-MD5 DIGEST-MD5
接下来新建一个连接stmp服务的用户名和密码:
1 [root@mypi ~]# saslpasswd2 -c -u `postconf -h mydomain` steemit
这条命令会新建一个 [email protected]
的用户,接着会让你输入密码,假设密码为 123456789
。
新建完成后,可以使用 sasldblistusers2
命令 来查看 已经添加了哪些用户(密码使用userPassword代替):
修改 sasldb
的权限,让 postfix
可以读取其中的内容
1 2 [root@mypi ~]# chgrp postfix /etc/sasldb2 [root@mypi ~]# chmod 640 /etc/sasldb2
启动 postfix 并添加开机启动 如果是 centos7 ,执行下面的命令
1 2 systemctl start postfix systemctl enable postfix
测试smtp 在另外的电脑上执行下面的命令
1 2 3 4 5 6 7 8 / # nc mypi.win 25 220 ETY001 Steemit Mention Server auth login 334 VXNlcm5hbWU6 c3RlZW1pdEBteXBpLndpbg== 334 UGFzc3dvcmQ6 MTIzNDU2Nzg5 235 2.7.0 Authentication successful
其中 auth login
为登陆验证指令, c3RlZW1pdEBteXBpLndpbg==
是邮箱地址[email protected]
的 base64
编码后字符串,MTIzNDU2Nzg5
是密码123456789
的 base64
编码后字符串。