以QQ邮箱为例
我们学习使用的是云主机,因服务器的25端口默认封闭,需要使用SSL加密端口(通常是465)来对外发信,以下样例适用于程序调用外部邮箱发信的场景,调用的邮箱服务器需要支持SSL加密。注意:云服务器上安全组设置开放465端口!!!
一、先去QQ邮箱,开启SMTP和获取授权码
进入要作为发送者的邮箱。点击“设置”——“账户”标签,然后向下滚动找到设置“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”的部分。
点击POP3/SMTP服务的“开启”,然后出现一个弹窗。使用与此QQ绑定的手机发送短信“配置邮件客户端”到1069070069,然后点击“我已发送”,会出现新的弹窗显示授权码。将此授权码记录下来,在服务器上配置发件时使用。
二、停止服务(使用root用户)
service sendmail stop
chkconfig sendmail off
三、启动postfix服务(使用root用户)
首先调整postfix的参数:
vi /etc/postfix/main.cf
找到inet_interfaces参数,默认值为localhost,改为all
然后执行:
service postfix start
chkconfig postfix on
#postfix check如果有错误,会显示错误信息
postfix check
#检查一下输出postfix状态,是否running状态
systemctl status postfix
四、创建认证(使用个人用户)
在个人用户的家目录创建一个.certs目录
[hadoop@ruozedata001 ~]$ mkdir ~/.certs/
然后逐行执行下列命令:
[hadoop@ruozedata001 ~]$ echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
[hadoop@ruozedata001 ~]$ certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[hadoop@ruozedata001 ~]$ certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[hadoop@ruozedata001 ~]$ certutil -L -d ~/.certs
进入~/.certs目录
[hadoop@ruozedata001 ~]$ cd ~/.certs
执行
[hadoop@ruozedata001 .certs]$ certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
五、配置邮件发送者(使用root用户)
编辑/etc/mail.rc文件,添加下面的配置信息
set from=配置的QQ邮箱地址
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=QQ号
#授权码
set smtp-auth-password=第一步获取到的授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/home/hadoop/.certs
六、测试是否配置成功(使用个人用户)
执行
[hadoop@ruozedata001 ~]$ echo hello word | mail -s " title" 收件邮箱
查看邮箱是否收到此邮件
七、发送不带附件的邮件进行测试(使用个人用户)
新建一个test_email.sh文件(设置可执行权限),内容如下:
\#!/bin/bash
EMAILFROM=配置的邮箱地址
EMAILTO=收件邮箱
JOB_NAME="TEST__E-MAI__WITHOU__ANNEX__"
RUNNINGNUM=666<br>
echo -e "`date "+%Y-%m-%d %H:%M:%S"` : The current running $JOB_NAME job num is
$RUNNINGNUM in 192.168.137.201 ......" | mail \
-r "From: alertAdmin </${EMAILFROM}>" \
-s "Warn: Skip the new $JOB_NAME spark job." ${EMAILTO}
执行此shell脚本后,查看邮箱是否收到此邮件。
八、发送带附件的邮件进行测试(使用个人用户)
注意:需要使用mailx命令,没有安装的话用root用户执行yum -y install mailx命令进行安装。
新建一个test_email.sh文件(设置可执行权限),内容如下:
\#!/bin/bash
EMAILFROM= 配置的邮箱地址
EMAILTO=收件邮箱
echo -e "`date "+%Y-%m-%d %H:%M:%S"` : Please to check the fail sql attachement." | mailx \
-r "From: alertAdmin <${EMAILFROM}>" \
-a error.log \
-s "Critical:KSSH fail sql." ${EMAILTO}
在同目录创建一个error.log文件,在其中编辑一点内容。
执行此shell脚本后,查看邮箱是否收到此邮件。并下载附件查看内容