Send email with attachment by msmtp and mutty in cli/shell/bash

Intro

这几天摆弄了一下 Motion ,一个有动态侦测功能的视频监控软件。当画面变动超过预定的阀值,就会触发拍照和录像功能。这些相应的事件可以添加回调脚本,因此可以利用这个回调来发送邮件以达到警报的效果。当我们举家外游时就可以利用它来监控家里的安全。

邮件发送,既是一个简单,也是一个复杂的课题。我记得以前我还自己搭建过 postfix 的邮件服务器,各种 DNS 设置,域名校验,花了不少时间和精力终于是搞到 Gmail 可以正常接收而不地被标记为 Spam 。时至今日,各种反垃圾邮件机制更加复杂,自己搭建邮件服务器显然是个不划算的买卖,直接使用现有的免费邮箱服务这种多快好省的选择才是王道。

简单来讲,就是在命令行中实现 Foxmail/Outlook 这些邮件客户端的功能,这样我们就可以在任何可以执行 shell 脚本的地方随意的加入邮件发送功能。

以下是在 Arch Linux 下配置邮件发送的方法:

Guide

更新包信息顺便升级软件

1
pacman -Syu

安装配置 msmtp

1
pacman -S msmtp

配置文件在 /etc/msmtprc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
defaults
auth on
tls on
tls_starttls off
#tls_certcheck off
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /tmp/msmtp.log

account MY_SMTP
host smtp.qq.com
port 465
from xxx@qq.com
user xxx@qq.com
password xxx

account default : MY_SMTP

上面这个是 qq 邮箱的配置,注意需要在 qq 邮箱的设置中开启 smtp 服务。其它一些邮箱服务可能要把 tls_certcheck 设置为 off

安装使用 mutty

msmtp 专注于邮件发送,对于邮件本身内容编排控制功能就要简陋许多。我想在报警邮件中增加一张图片以便可以大致知道是不是小偷进屋了。用 mutty 就可以很方便地实现附件添加。

1
pacman -S mutty

使用方法很简单:

1
echo "Movement has been detected on: %d %m %Y. The time of the movement was: %H:%M (Hour:Minute)" | mutt -s "Motion Detection Alert" yyy@qq.com -a %f

  • echo 部份是邮件正文
  • -s 标题
  • -a 附件
  • 收件人邮箱

其它

另外如果你有一些程序利用了系统的 sendmail 功能,你也可以安装 msmtp-mta 这个包,会帮你创建 sendmail 链接。把系统的 sendmail 功能转移到 msmtp 上。很方便。

Share Comments