使用 mutt 命令行收发 126 邮件(带附件,简单界面)

原创
2021/12/08 20:16
阅读数 459

某并非 email 重度使用者,多是看个通知邮件,传个文件而已。故此处仅涉及收发,不涉及 mutt 广大的奇技淫巧,有兴趣的客官请自行搜索。
本文使用的是广为人知的 126 邮箱服务,在设置里开通授权后,便可通过 imap 收取,通过 smtp 发送。
mutt 当前版本是 2.1,早已支持这两个协议。

mutt 核心配置

# 126 imap 帐号
set imap_user="用户名@126.com"
set imap_pass="授权码"
set folder = "imaps://imap.126.com:993"
# 发送邮件
set ssl_starttls = yes
set ssl_force_tls = yes
set smtp_url = "smtps://${imap_user}@smtp.126.com:465/"
set smtp_pass=$imap_pass
# From 邮件头
set use_from = yes
set from = "amita <${imap_user}>"

碰到的错误有:读错误、invalid user 等。
但如果接收邮件没问题,那基本可以肯定是发送配置问题。
为解决这些错误,搜了不少资料,最终确定主要错的就是协议字符串,比如 folder、smtp_url,如果用到 SSL 加密,协议应以 s 结尾
而且 smtp_url 里还要带上坑爹的完整用户名 —— 邮箱,且这个用户名要和 from 一致,否则服务器拒绝!

接下来就是收获时刻,一行搞定:echo "Hello world!" | mutt -s '主题' xxxx@qq.com -a 附件

简单界面

在命令行指定附件路径总不太舒服,且不想把邮件内容暴露在 shell 的历史命令里,所以不如加个简单界面。
用到了 yad 命令,是 zentity 的改进版
其 form 类型的对话框支持的控件类型较多,正合适

text=$(yad --title '发送邮件' --width='430' --height='145' --buttons-layout='edge' --button='取消:1' --button='发送:0' --form --align='center' --field='邮箱' --field='附件:MFL' --field='内容(可选):TXT' --escape-ok)
readarray -d '|' -t form <<< "$text"
email=${form[0]}
attach=${form[1]}
content=${form[2]}
mutt -s "一封来自地球的邮件" "$email" -a "$attach" <<< "$content"

yad

参考文档

  1. mutt 官方文档
  2. 126 邮箱开通授权
  3. yad man page - General Commands
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部