centos7发送邮件(1):mailx发送163、qq邮件
一. 简介
最近就好好的研究了下centos怎么发邮件,最后,完美的通过qq和163的smtp服务器发送,纪录下。
二. mailx、sendmail、postfix
上面三个程序在centos里都和邮件有关,它们的区别是:
- mailx是邮件客户端程序,用它我们可以把邮件发送给服务端,这次我主要是依靠它。
- sendmail和postfix是服务端,mailx发送的邮件最后还是要通过它们才能真正发送出去。postfix可以说是sendmail的升级版。但是我用的是qq和163的服务,所以这两个程序要去除。
所以我们要运行的命令是
//去除开机启动postfix
chkconfig postfix off
//停止postfix服务
service postfix stop
//去除postfix命令
yum -y remove postfix
//同上面
chkconfig sendmail off
service sendmail stop
yum -y remove sendmail
//安装mailx
yum -y install mailx
二. qq、163
一般邮件服务器会提供smtp、smtps和smtp starttls服务来发送邮件。smtp最简单的,但也是最不安全的,为了安全起见,最好使用smtps或者smtp starttls发送。
下面是qq和163邮箱支持的服务:
qq邮箱
smtp地址:smtp.qq.com
smtps端口:465
starttls端口:587
163邮箱
smtp地址:smtp.163.com
smtp端口:25/80
smtps端口:465/994
要使用的话,需要注册这两家的账号,并且开启smtp服务,获取授权码,具体的操作也不复杂,自己折腾下吧。
三. smtp发送
163是支持smtp发送邮件的,qq不支持,会提示需要一个安全的链接。
下面的配置文件中,请自行将其中的xxx替换成自己的账号和密码。
smtp mail.rc
set smtp=smtp.163.com
set smtp-auth=login
set smtp-auth-user=xxx@163.com
set smtp-auth-password=xxx
set from=xxx@163.com
将上面的配置加到系统/etc/mail.rc后面,然后执行
echo "Hello" | mail -v -s "test" xxx@qq.com
成功发送,就是这么简单,当然也不安全。
三. smtps发送
一般的邮箱都会提供smtps服务,这里先说它的配置。
smtps mail.rc
set nss-config-dir=/etc/pki/nssdb
set ssl-verify=ignore
set smtp=smtps://smtp.qq.com:465
set smtp-auth=login
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=xxx
set from=xxx@qq.com
将上面的配置加到系统/etc/mail.rc的后面,然后执行
echo "Hello" | mail -v -s "test" xxx@qq.com
虽然会看到"Error in certificate: Peer's certificate issuer is not recognized."提示,但是因为我们设置了ssl-verify=ignore,邮件还是发送出去了。
如果你是强迫症患者,可以执行下面命令
mkdir /root/.certs
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
certutil -L -d /root/.certs
//? certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
//? certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
然后修改nss-config-dir为/root/.certs,配置如下
smtps mail.rc
set nss-config-dir=/root/.certs
set ssl-verify=ignore
set smtp=smtps://smtp.qq.com:465
set smtp-auth=login
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=xxx
set from=xxx@qq.com
执行echo "Hello" | mail -v -s "test" xxx@qq.com
,完美发送。
163
smtps mail.rc
set nss-config-dir=/etc/pki/nssdb
set ssl-verify=ignore
set smtp=smtps://smtp.163.com:465
set smtp-auth=login
set smtp-auth-user=xxx@163.com
set smtp-auth-password=xxx
set from=xxx@163.com
强迫症命令
mkdir /root/.certs
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
certutil -L -d /root/.certs
如下配置
smtps mail.rc
set nss-config-dir=/root/.163certs
set ssl-verify=ignore
set smtp=smtps://smtp.163.com:465
set smtp-auth=login
set smtp-auth-user=xxx@163.com
set smtp-auth-password=xxx
set from=xxx@163.com
执行echo "Hello" | mail -v -s "test" xxx@qq.com
,完美发送。
四. starttls发送
qq邮箱配置
starttls mail.rc
set smtp-use-starttls
set nss-config-dir=/etc/pki/nssdb
set ssl-verify=ignore
set smtp=smtp.qq.com:587
set smtp-auth=login
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=xxx
set from=xxx@qq.com
强迫症命令和smtps一样的,如下配置
starttls mail.rc
set smtp-use-starttls
set nss-config-dir=/root/.certs/
set ssl-verify=ignore
set smtp=smtp.qq.com:587
set smtp-auth=login
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=xxx
set from=xxx@qq.com
五. 总结
-
smtp发送邮件不推荐使用。
-
smtps一般邮箱为了兼容都会支持,比较通用。
-
starttls据说比smtps好,但不是都有支持。
有需要邮件通知的同学,赶紧根据自己的情况选择合适的配置愉快得发送邮件吧。
参考: