../
我的Email工作流
===============

2023-01-25

## 需要安装的软件

- Maildrop
- Fetchmail
- Msmtp
- Mutt

上述软件在几乎所有的Linux发行版中都有提供。

    sudo yum install maildrop fetchmail msmtp mutt

## 收信

收信要用到两个软件,首先是fetchmail,利用IMAP协议或者POP3协议从服务端下载邮件,
然后交给maildrop处理。Unix-like操作系统下用户的邮件默认会存放在
/var/spool/mail/username。这也是maildrop默认会保存邮件的地方。如果邮件不多,没
有特殊的邮件过滤需求,可以不用配置maildrop,用默认设置就好。

至于fetchmail,则配置成从INBOX和JUNK两个目录下用IMAP协议下载未读邮件。同时不删
除邮件,只是将邮件设置为已读:

    poll smtp.example.org proto imap
        username "user@example.org"
        password "xxxxxxxx"
        options ssl keep
        mda "/usr/bin/maildrop";
    
    poll smtp.example.org proto imap
        username "user@example.org"
        password "xxxxxxxx"
        options ssl keep
        folder JUNK
        mda "/usr/bin/maildrop";

然后定时运行fetchmail即可检查电子邮件。

## 阅读邮件

阅读邮件的话可以使用mutt,mutt默认会检视/var/spool/mail/username文件。为了让邮
件按照会话和时间倒序显示,可以设置mutt的邮件排序方式,在~/.muttrc中加入:

    set folder=~/mail
    set sort_aux=last-date-received       
    set sort=threads
    set sort_re

对于不要的邮件,可以按d键标记删除;如果要批量移动邮件到其他邮箱文件,可以按t键
给邮件打标,然后按一下“;”键,最后按下“s”键移动邮件。

对于含有html邮件或者其他附件的邮件,可以用管道功能交给相应的应用程序显示。

例如,对于HTML邮件,可以按v键进入附件界面,选中text/html附件,按下“|”键,然后用
一个自定义脚本让firefox可以显示该邮件:

    #!/bin/bash
    
    cat > /tmp/hmail.html
    firefox /tmp/hmail.html

至于图片,则可以让Eye of Gnome,或者其他图片浏览器显示:

    #!/bin/bash
    
    cat > /tmp/img
    eog /tmp/img

或者直接保存下来:

    cat > [filename]

## 发信

类Unix系统下面默认使用sendmail命令发送邮件,msmtp也提供sendmail兼容的使用方式。
首先配置~/.msmtprc:

    account mymail
    tls on
    auth on
    host smtp.exmaple.org
    port 587
    user user@example.org
    from user@example.org
    password xxxxxxxx
    logfile /home/user/.msmtp.log
    
    account default : mymail

然后配置自己的名字,在~/.muttrc中加入:

    set from="Your Fullname Here <user@example.org>"

随后,用

    mutt target@example.org

即可开始编辑邮件,最后按y键发送。

## Git邮件工作流

如果要给使用邮件列表的开源项目贡献补丁,就要使用git send-email功能。Git默认会使
用sendmail发送邮件,如果msmtp配置好了的话,只要直接使用就可以了。

假如要把最近两次commit的内容发送到某个邮件列表,只需要:

    git send-email --to target@example.org HEAD~2..HEAD

## 地址簿

Linux发行版中一般会提供一个命令行的地址簿应用:“abook”。Abook可以和mutt互操作。
但是个人觉得并不好用,不如直接用文本文件,用grep检索。所以这里就不再赘述了。

## 为什么要弄得这么麻烦

最后说一下为什么要在终端里面收发邮件。

首先,Email并不是一个复杂的东西,大部分情况下只是纯文本而已。为了这么简单的信息,
使用笨重缓慢的客户端,有点大材小用。

其次,在终端里面,用来收发邮件的都是一些传统的Unix工具及其继承者,hack起来很方
便,很容易定制需求,例如:自定义一套邮件过滤规则,又或者用脚本给自己发邮件等等。
如果是电子邮件的重度用户的话这套工作流会很方便。



--------------------------------------------------------------------
Email: i (at) mistivia (dot) com