温馨提示×

ubuntu定时发送邮件步骤

小樊
47
2025-10-26 18:05:48
栏目: 智能运维

Ubuntu定时发送邮件步骤

1. 安装邮件发送工具

首先需要安装支持SMTP协议的邮件发送工具(如heirloom-mailxmutt),用于在脚本中调用发送邮件功能。

  • 安装heirloom-mailx(推荐):
    sudo apt update
    sudo apt install heirloom-mailx
    
  • 安装mutt(可选):
    sudo apt install mutt
    

2. 配置邮件工具的SMTP信息

编辑邮件工具的配置文件,填入SMTP服务器、端口、认证信息(需替换为你的邮箱信息):

  • 配置heirloom-mailx
    编辑/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)
    
  • 配置mutt
    编辑~/.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
    

3. 测试邮件发送功能

通过命令行发送一封测试邮件,验证配置是否正确:

echo "这是一封测试邮件内容" | mail -s "测试邮件主题" recipient@example.com

或使用mutt发送带附件的邮件:

echo "邮件内容" | mutt -s "测试邮件" -a /path/to/attachment.txt -- recipient@example.com

若未收到邮件,需检查:

  • SMTP服务器地址、端口是否正确(如QQ邮箱需使用smtp.qq.com:465,端口465用于SSL加密);
  • SMTP用户名、密码(或授权码)是否正确;
  • 邮箱是否开启了SMTP服务(如QQ邮箱需在“设置-账户”中开启“POP3/SMTP服务”)。

4. 编写发送邮件的Shell脚本

创建一个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
    

5. 配置Cron定时任务

使用crontab命令编辑当前用户的定时任务,设置邮件发送的时间规则(如每天早上8点发送):

crontab -e

在打开的编辑器中添加以下内容(每行代表一个定时任务):

# 每天08:00执行sendmail.sh脚本
0 8 * * * /home/user/sendmail.sh
  • Cron时间格式说明
    分钟 小时 日期 月份 星期 命令(如0 8 * * *表示每天8点整执行)。
  • 保存并退出
    若使用vim编辑器,按Ctrl+XYEnter保存。

6. 验证定时任务

  • 查看定时任务列表
    crontab -l
    
    确认添加的任务是否存在。
  • 手动触发脚本
    /home/user/sendmail.sh
    
    检查收件箱是否收到邮件,并查看/home/user/mail.log日志文件确认执行情况。
  • 查看Cron日志
    若邮件未发送,可通过以下命令查看Cron执行日志(需系统开启Cron日志):
    grep CRON /var/log/syslog
    

常见问题排查

  • 邮件未收到:检查SMTP配置是否正确(尤其是端口、授权码);确认Cron服务是否运行(sudo systemctl status cron);查看/var/log/syslog中的Cron日志。
  • 脚本无执行权限:使用chmod +x /path/to/script.sh添加权限。
  • 环境变量问题:Cron执行时环境变量与终端不同,建议在脚本中使用绝对路径(如/usr/bin/mail而非mail)。

0