前言

Linux操作系统支持发送邮件,一般用于某程序执行完某任务时发送邮件提示该任务已完成或者出错,用于定时任务很友好。

环境

操作系统:Ubuntu

邮件服务器:163邮箱

安装软件

Ubuntu使用邮件功能需要安装两个软件

在安装mailutils时,过程中弹出的界面选择no configuration即可。

1
apt-get install -y mailutils ssmtp

查看配置文件

安装完程序后,在/etc/ssmtp/下,有两个配置文件,如下:

01-文件-20221212-818

配置发送邮箱地址

1
vim /etc/ssmtp/ssmtp.conf

ssmtp.conf配置文件内容可以参照我的

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
# ssmtp 发送邮件配置文件
# 发件人邮箱
root=aa134xxx056@163.com

# 邮件接收地址,
mailhub=smtp.163.com:465

# 发件人邮箱(用于验证该邮箱的所有权)
AuthUser=aa134xxx056@163.com
# 发件人邮箱授权码
AuthPass=UKZxxxxxxLGK
#配置使用证书
UseTLS=Yes

不知道邮件地址?

查看常见的邮件服务器地址:https://blog.hikki.site/dd7ff60b.html

如何获取授权码?

获取网易126/163邮箱授权码

获取QQ邮箱授权码

配置revaliases

1
2
3
4
#格式:
# root:发件人邮箱:邮件服务器地址:端口号(端口若不写则默认端口为25)
root:aa134xxx056@163.com:smtp.163.com:465
#表示主机用户root让smtp.163.com:465这个邮件服务器以aa134xxx056@163.com为发件人给其他用户发邮件

测试发送邮件

不含附件的邮件

1
2
3
4
5
6
7
8
9
10
#测试一
echo "邮件正文" | mail -s "邮件主题" 4616745454@qq.com
#-s参数表示后面指定一个邮件主题
# 4616745454@qq.com是收件人的邮箱,可替换为指定的收件人邮箱

#测试二
mail -s "邮件主题" 4616745454@qq.com < test.txt
#text.txt中的内容将作为邮件正文的内容发送

#测试一和测试二做的事情是一样的,都只是发送主题和正文

含附件的邮件

1
2
echo "邮件正文" | mail -s "邮件主题" -A test.txt 4616745454@qq.com
#-A指定要发送的一个附件,将这个文件发送给收件人

邮件日志

/var/log下有2个mail的日志,一个是mail.log,一个是mail.err

  • mail.log记录了mail命令的运行日志。
  • mail.err记录了mail命令的报错日志。

FAQ

Q:/var/log/mail.err中的错误日志:Cannot open smtp.qq.com:25
A:这个错误是无法访问smtp.qq.com:25,因为smtp.qq.com的邮件服务器端口是465,所以在 /etc/ssmtp/ssmtp.conf 、/etc/ssmtp/revaliases 中都需要把邮件服务器的端口改成465。(Tip:在这两个配置文件中配置邮件服务器的域名的时候,端口是必须指定的,如果不指定则默认为25)