首先需要安装支持SMTP协议的邮件发送工具(如heirloom-mailx或mutt),用于在脚本中调用发送邮件功能。
sudo apt update
sudo apt install heirloom-mailx
sudo apt install mutt
编辑邮件工具的配置文件,填入SMTP服务器、端口、认证信息(需替换为你的邮箱信息):
/etc/s-nail.rc文件(若不存在则创建),添加以下内容:set from=your_email@example.com # 发件人邮箱
set smtp=smtps://smtp.example.com:465 # SMTP服务器及端口(如QQ邮箱为smtp.qq.com:465)
set smtp-auth-user=your_email@example.com # SMTP用户名(通常为邮箱地址)
set smtp-auth-password=your_password # SMTP密码(或授权码,部分邮箱需开启SMTP服务并获取授权码)
set smtp-auth=login # 认证方式(login/plain/digest-md5)
~/.muttrc文件,添加以下内容:set sendmail="/usr/bin/msmtp" # 使用msmtp作为发送程序
set use_from=yes
set realname="Your Name" # 发件人昵称
set from=your_email@example.com
set envelope_from=yes
通过命令行发送一封测试邮件,验证配置是否正确:
echo "这是一封测试邮件内容" | mail -s "测试邮件主题" recipient@example.com
或使用mutt发送带附件的邮件:
echo "邮件内容" | mutt -s "测试邮件" -a /path/to/attachment.txt -- recipient@example.com
若未收到邮件,需检查:
smtp.qq.com:465,端口465用于SSL加密);创建一个Shell脚本(如/home/user/sendmail.sh),用于封装邮件发送逻辑(需替换为你的实际路径和内容):
#!/bin/bash
# 设置邮件主题、收件人、内容文件路径
SUBJECT="Ubuntu定时任务邮件"
RECIPIENT="recipient@example.com"
CONTENT_FILE="/home/user/mail_content.txt" # 邮件内容文件(需提前创建)
# 检查内容文件是否存在
if [ -f "$CONTENT_FILE" ]; then
# 发送邮件(使用heirloom-mailx)
echo "$(date '+%Y-%m-%d %H:%M:%S') - 开始发送邮件" >> /home/user/mail.log
cat "$CONTENT_FILE" | mail -s "$SUBJECT" "$RECIPIENT"
echo "$(date '+%Y-%m-%d %H:%M:%S') - 邮件发送完成" >> /home/user/mail.log
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - 内容文件不存在,未发送邮件" >> /home/user/mail.log
fi
/home/user/mail_content.txt,添加邮件正文内容(如系统日志、备份结果等):服务器IP:192.168.1.100
当前时间:$(date '+%Y-%m-%d %H:%M:%S')
系统状态:正常
chmod +x /home/user/sendmail.sh
使用crontab命令编辑当前用户的定时任务,设置邮件发送的时间规则(如每天早上8点发送):
crontab -e
在打开的编辑器中添加以下内容(每行代表一个定时任务):
# 每天08:00执行sendmail.sh脚本
0 8 * * * /home/user/sendmail.sh
分钟 小时 日期 月份 星期 命令(如0 8 * * *表示每天8点整执行)。vim编辑器,按Ctrl+X→Y→Enter保存。crontab -l
确认添加的任务是否存在。/home/user/sendmail.sh
检查收件箱是否收到邮件,并查看/home/user/mail.log日志文件确认执行情况。grep CRON /var/log/syslog
sudo systemctl status cron);查看/var/log/syslog中的Cron日志。chmod +x /path/to/script.sh添加权限。/usr/bin/mail而非mail)。