postfix或是sendmail在我看来都是超复杂的,现在还是完全不懂,一看到那么大一堆配置文件就直接先晕了,所以,之前我都是用mailx在利用外部smtp服务器发邮件,不用自己搭建服务器。
最近发现用mailx发邮件时灵时不灵的,所以找了种方法,利用postfix发smtp外部邮件。。
参考:http://www.jslink.org/linux/centos-postfix-mailx-qq-smtp-sendmail.html
首先申请一个腾讯企业邮箱,免费的,个人QQ邮箱也行,事实上QQ邮箱真的比其他邮箱好用(除了Gmail)
一、卸载sendmail
service sendmail stop yum remove sendmail
安装依赖
yum install -y mailx cyrus-sasl-plain
二、配置账号信息
创建密码配置文件
echo "[smtp.exmail.qq.com]:587 [email protected]:password" > /etc/postfix/sasl_passwd
smtp.exmail.qq.com是发件服务器
587 是发信加密端口,还有个465端口,但是我用465怎么都不成功。
password是密码
密码是明文存储的,通过postmap创建hash加密文件sasl_passwd.db
最后测试没问题就可以删除sasl_passwd
postmap hash:/etc/postfix/sasl_passwd
三、创建ca证书,配置main.cf
进入certs目录,创建证书
cd /etc/ssl/certs/ make
make server.pem
创建完成后会生成server.pem
移动到/etc/postfix/目录
mv server.pem /etc/postfix/
重要:配置 generic 替换系统发信人,不然当你以root用户执行mailx的时候,发信人将是[email protected]
这当然是不可能被腾讯允许的,会报错误(mail from address must be same as authorization user) 如下:
需要在/etc/postfix/generic下添加账号映射,其他的服务器账号同理都要添加上。
echo '[email protected] [email protected]' >>/etc/postfix/generic
并生成generic.db文件
postmap /etc/postfix/generic
然后配置main.cf,备份原文件,然后清空main.cf,替换如下:
mydomain = example.com myorigin = $mydomain myhostname = $mydomain mydestination = $mydomain alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases relayhost = [smtp.exmail.qq.com]:587 smtp_use_tls = yes smtp_tls_CAfile = /etc/postfix/server.pem smtp_generic_maps = hash:/etc/postfix/generic smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
四、先再开一个终端,实时查看maillog发送日志
tail -f /var/log/maillog
最后重启postfix,发送测试邮件
service postfix restart
测试一下
echo 'This is a test mail' | mail -r "admin@example.com (iansiu)" -s 'about php-fpm service' [email protected]
成功了
/etc/postfix/sasl_passwd
可以删除掉了