wangbin
  • wangbin
  • 2017-05-27
  • IT

centos7发送邮件(1):mailx发送163、qq邮件

一. 简介

最近就好好的研究了下centos怎么发邮件,最后,完美的通过qq和163的smtp服务器发送,纪录下。

二. mailx、sendmail、postfix

上面三个程序在centos里都和邮件有关,它们的区别是:

  1. mailx是邮件客户端程序,用它我们可以把邮件发送给服务端,这次我主要是依靠它。
  2. 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服务,这里先说它的配置。

qq

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

五. 总结

  1. smtp发送邮件不推荐使用。

  2. smtps一般邮箱为了兼容都会支持,比较通用。

  3. starttls据说比smtps好,但不是都有支持。

有需要邮件通知的同学,赶紧根据自己的情况选择合适的配置愉快得发送邮件吧。

参考:

  1. http://irow10.blog.51cto.com/2425361/1812638/

  2. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil