管理服务器时我们经常需要写一些监测脚本,然后在出问题的时候通过邮件来通知,接下来我们为大家介绍用最简单的方式来实现 Linux 发送邮件。

Mail是cent7 用来发送邮件的指令,直接开干。

系统版本:centos7x3.10.0-514.el7.x86_64

1、安装

centos下默认自带mail命令:

可以用如下命令查看存放位置:

1
which mail

结果:

WeChat 截圖_20220226112544

如果出现没用此命令说明没用安装,可以使用下面的命令进行安装一下:

1
yum -y install mailx

2、配置

利用mail命令进行邮件发送,是需要利用到第三方邮件服务器,如126、163等,需要一个授权码来识别(注意不是邮箱密码)

一、获取邮箱授权码:

获取授权码过程如下:(我这里以126邮箱为例,其他的邮箱也差不多)

登录 126 邮箱官网后点击设置,选择 POP3/SMTP/IMAP

111

POP3/SMTP/IMAP服务都开启了

WeChat 截圖_20220226113507

接着找到 授权密码管理 点击 新增授权码 然后发送短信后就会出现授权码,复制下来,待会要用。

WeChat 截圖_20220226113618 WeChat 截圖_20220226113641

二、授权码获取到后,按如下步骤配置:

1、修改/etc/mail.rc

1
vim /etc/mail.rc

2、在最后添加如下配置:

1
2
3
4
5
6
7
8
# mail config
set from=xxxx@126.com
set smtp=smtps://smtp.126.com:465
set smtp-auth-user=xxxx@126.com
set smtp-auth-password=xxxxxxxx
set smtp-auth=login
set nss-config-dir=/root/.certs
# set ssl-verify=SSL

—说明:(我这里是以 126 邮箱为例)
from:对方收到邮件时显示的发件人
smtp:指定第三方发邮件的smtp服务器地址
set smtp-auth-user:第三方发邮件的用户名
set smtp-auth-password:邮箱授权码
smtp-auth:SMTP的认证方式,默认是login,也可以改成CRAM-MD5或PLAIN方式
nss-config-dir: SSL验证信息存放位置,需要后面步骤创建
ssl-verify: SSL验证信息忽略

3、创建 /root/.certs 目录

1
mkdir -p /root/.certs

4、下载证书到 /root/.certs 目录,本例是下载126证书

a、向126请求证书

1
echo -n | openssl s_client -connect smtp.126.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/126.crt

b、添加一个证书到本地:

1
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/126.crt

c、再次添加一个证书到本地:

1
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/126.crt

d、标记证书被信任

1
2
cd /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 126.crt

5、测试邮件发送,有两种方式,可以用mail命令也可以用mailx命令,如下:

a、使用mail命令 ,加上 -v 会显示发送过程,多个接收人直接在后面空格加上其他人邮箱地址:

1
echo "hallo" | mail -v -s "this is Test Mail" xxxxxx@qq.com 

WeChat 截圖_20220227010001

出现这个说明邮件已经发送成功

b、使用mailx命令:

1
mailx -s "hello" xxxxxx@qq.com

回车后手动输入邮件正文,如下:

1151633-20190220143259142-1544517868

然后按ctrl+d结束输入,自动发送

mail 参数:

1
2
3
4
5
6
7
8
9
10
11
12
-b address	指定密件副本的收信人地址
-c address 指定副本的收信人地址
-f [file] 读取指定邮件文件中的邮件
-i 忽略终端发出的信息
-I 使用互动模式
-n 启动时禁止读取 /etc/mail.rc
-N 阅读邮件时,不显示邮件的标题
-s subject 指定邮件的主题
-t 要发送的消息应包含带有 To:、Cc:、或 Bcc: 字段的消息头,在命令行上指定的收件人将被忽略。
-u user 读取指定用户的邮件
-v 执行时,显示详细的信息
-V 显示版本信息并退出