macOS 的 mail 命令需依赖已启用并配置的 Postfix 才能外发邮件;默认 Postfix 已启用但无 SMTP 配置,须手动配置 relayhost、SASL 认证及 TLS 后 reload,或改用 AppleScript 调用「邮件」App 实现免配置通知。
macos 自带 mail 命令,无需额外安装即可在 shell 脚本中发送邮件提醒,但需提前配置本地邮件传输代理(mta)或使用系统默认的 sendmail 兼容接口。实际可用性取决于是否启用并正确配置了 macos 的邮件服务(如通过「邮件」app 或 postfix)。
确认系统 mail 命令可用
macOS 的 mail 是 BSD 风格命令,依赖底层 MTA(如 Postfix)。默认情况下 Postfix 是启用的,但未配置 SMTP 服务器时无法外发邮件。可先测试本地发送能力:
- 运行
mail -s "test" your@domain.com < /dev/null,若无报错且邮件能收到,说明已就绪 - 若提示
send-mail: command not found或超时,说明 Postfix 未启用或配置缺失 - 检查 Postfix 状态:
sudo postfix status;如未运行,用sudo postfix start启动
配置 Postfix 发送外部邮件(推荐)
macOS 自带 Postfix,只需简单配置即可通过 Gmail、iCloud 或企业 SMTP 发信。以 Gmail 为例(需开启 App 密码):
- 编辑配置:
sudo nano /etc/postfix/main.cf - 追加以下内容(替换为你的邮箱和 App 密码):
relayhost = [smtp.gmail.com]:587<br>smtp_sasl_auth_enable = yes<br>smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd<br>smtp_sasl_security_options = noanonymous<br>smtp_tls_CAfile = /etc/ssl/cert.pem<br>smtp_use_tls = yes
- 创建密码文件:
sudo nano /etc/postfix/sasl_passwd,填入:[smtp.gmail.com]:587 your@gmail.com:your_app_password - 生成哈希数据库:
sudo postmap /etc/postfix/sasl_passwd,再sudo postfix reload
Shell 脚本中调用 mail 发送提醒
配置完成后,在脚本中直接使用 mail 即可。支持主题、正文、附件(需 uuencode 或 mutt):
- 基础用法:
echo "任务已完成" | mail -s "【提醒】备份完成" user@example.com - 多行正文:
cat <<EOF | mail -s "日志摘要" admin@local<br>时间:$(date)<br>状态:成功<br>EOF
- 带附件(需安装
mutt):echo "见附件" | mutt -s "报告" -a "/path/to/file.log" -- recipient@domain.com(brew install mutt)
替代方案:用 AppleScript 调用「邮件」App
若不想配置 Postfix,可绕过命令行 MTA,直接触发系统「邮件」App(需已登录 iCloud 或配置好账户):
- 脚本中嵌入 AppleScript:
osascript -e 'tell application "Mail"' -e 'set newMessage to make new outgoing message with properties {subject:"提醒", content:"脚本执行完毕", visible:true}' -e 'tell newMessage to make new to recipient with properties {address:"you@domain.com"}' -e 'send newMessage' -e 'end tell' - 优点:无需 SMTP 配置,适合内网或仅通知本机用户;缺点:需图形界面、会弹窗、不可后台静默发送


















