mail是客户端,sendmail/postfix是服务端;mail默认使用sendmail对外发送邮件。mail命令的系统级配置文件是/etc/mail.rc,用户级别的默认配置文件是~/.mailrc
yum install mailx -y
SMTP的主要配置,编辑/etc/mail.rc
cat >>/etc/mail.rc <<EOF set from=12345@qq.com set smtp=smtp.qq.com set smtp-auth-user=12345@qq.com set smtp-auth-password=wqfsvfpzdtssbida set smtp-auth=login EOF
需要 QQ 邮箱的 SSL 证书,所以还需要手动的获取QQ邮箱的证书
#创建一个存放证书的目录 mkdir -p /root/.certs/ #获取QQ 邮箱的 SSL 证书 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" -t "C,," -d ~/.certs -i ~/.certs/qq.crt #添加第二个证书到证书数据库中 certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt #列出指定的目录下的所有证书 certutil -L -d /root/.certs #解决出现提示”Error in certificate: Peer's certificate issuer has been marked as not trusted by the. cd /root/.certs/ certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt
#-A表示添加,-n是nickname,可以随意取,例如126或qq;-t表示受信任的标签,可取值是t/c/p三种或者其组合;-d表示证书所在目录,-i指示证书文件的位置。
编辑/etc/mail.rc
cat >>/etc/mail.rc <<EOF set from=12345@qq.com set smtp=smtps://smtp.qq.com:465 set smtp-auth-user=12345@qq.com set smtp-auth-password=wqfsvfpzdtssbida set smtp-auth=login set nss-config-dir=/root/.certs set ssl-verify=ignore
EOF
set from= 显示的发件人,必须和认证用户邮箱一致
set smtp-auth-password=授权码 (QQ邮箱设置>>账户>>生成授权码)
测试,可使用以下3种方式
echo "zabbix test mail" |mail -s "zabbix" 12345@qq.com
cat /etc/fstab |mail -s "zabbix" 12345@qq.com
mail -s "zabbix" 12345@qq.com < /etc/fstab
# 126不支持STARTTLS,使用465端口 account 126 { set smtp=smtps://smtp.126.com:465 set smtp-auth=login set smtp-auth-user=12345@126.com set smtp-auth-password=password set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb set from=12345@126.com } account qq { set smtp=smtp.qq.com set smtp-auth=login set smtp-auth-user=12345@qq.com set smtp-auth-password=password set ssl-verify=ignore #set nss-config-dir=/etc/pki/nssdb set from=12345@qq.com }
配置文件中定义了两个账户,发送邮件时可用-A参数指定发信账户:
echo 'from 126' | mail -A 126 -s 'mail test' 12345@xxx.com echo 'from qq' | mail -A qq -s 'mail test' 12345@xxx.com
除了配置文件,也可以在命令行中用-S参数进行设置。例如:
echo 'mail test for command line option' | mail -s 'mail test' -S smtp=smtp://smtp.qq.com:587 -S smtp-auth=login -S smtp-auth-user=user@qq.com -S smtp-auth-password=password -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from="user@qq.com(nickname)" -S smtp-use-starttls=yes user@xxx.com
这种方法比较繁琐,就是将配置文件的每一行都作为选项写在命令中。在程序中调用mail命令发送邮件时可以采取这种方法。