163邮箱邮件通知功能配置

前言

  • 本文目标: 为耗时长的命令行任务(如PetaLinux编译)配置一个邮件通知脚本。脚本将在命令执行成功或失败后,自动发送邮件提醒。

获取163邮箱授权码

此为后续配置的前提,用于第三方客户端的SMTP认证。

  1. 登录 mail.163.com
  2. 进入 设置 -> POP3/SMTP/IMAP
  3. 确保 IMAP/SMTP服务 已开启。
  4. 在“授权码”管理处,获取一个16位的授权码并保存。后续配置中的密码将使用此授权码。

配置 msmtp 客户端

  1. 安装依赖:

    1
    2
    sudo apt update
    sudo apt install msmtp msmtp-mta mailutils
  2. 创建并编辑配置文件:

    1
    nano ~/.msmtprc
  3. 写入配置:
    将以下内容粘贴至 ~/.msmtprc

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # Default settings
    defaults
    auth on
    tls on
    tls_starttls on
    tls_trust_file /etc/ssl/certs/ca-certificates.crt
    logfile ~/.msmtp.log

    # 163 Account
    account 163
    host smtp.163.com
    port 465
    tls_starttls off # Use TLS on port 465
    from "your_name <your-email@163.com>"
    user your-email@163.com
    password your_163_authorization_code

    # Set default account
    account default : 163

    注意: 替换 from, user, 和 password 字段为你自己的信息。

  4. 设置文件权限 (安全关键):

    1
    chmod 600 ~/.msmtprc

创建 notify 别名函数

将邮件发送逻辑封装为快捷命令。

  1. 编辑 ~/.bashrc:

    1
    nano ~/.bashrc
  2. 在文件末尾添加函数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function notify() {
    # 执行传递给 notify 的所有参数,即您的原始命令
    "$@"

    # 获取上一个命令的成功/失败状态码
    local exit_code=$?

    # 将命令本身作为字符串,用于邮件内容
    local command_str="$*"

    # 定义发件人邮箱,这必须与您在msmtp中配置的user一致
    local sender_email="your-email@163.com"

    if [ $exit_code -eq 0 ]; then
    # 成功时发送的邮件
    echo "命令已于 $(date) 成功完成:

    '$command_str'" | mail -s "✅ 任务成功" -r "$sender_email" "$sender_email"
    else
    # 失败时发送的邮件
    echo "命令已于 $(date) 失败 (退出码: $exit_code):

    '$command_str'" | mail -s "❌ 任务失败" -r "$sender_email" "$sender_email"
    fi
    }
    • 注意: 替换 local sender_email="..." 中的邮箱地址。
  3. 激活配置:

    1
    source ~/.bashrc

使用方法

在任意命令前添加 notify 即可。

示例:

notify petalinux-build --sdk
notify tar -czf backup.tar.gz /large_directory