fdm
fdm (fetch and deliver mail),是一个用于投递和过滤邮件的简单程序。与其他同类用途的应用程序相比,它与 Mutt 非常注重设计原则的设计理念有相似之处。
安装
配置
fdm 可以通过配置文件进行配置。默认配置文件是 ~/.fdm.conf
,如果该文件不存在,则使用 /etc/fdm.conf
。
完整详细信息请参阅手册页 fdm(1)、fdm.conf(5) 和 /usr/share/doc/fdm-git/MANUAL
。
mbox
Alpine 使用 mbox 格式,因此我们需要设置一些我们将要编辑的文件
$ cd $ mkdir mail $ touch mail/INBOX .fdm.conf $ chmod 600 .fdm.conf mail/INBOX
maildir
Mutt 偏好使用大写的邮件目录,并且能够使用 maildir 格式。如果您计划使用 Mutt,请进行以下设置
$ cd $ touch .fdm.conf; chmod 600 .fdm.conf $ mkdir -p Mail/INBOX/{new,cur,tmp}
配置示例
编辑 .fdm.conf
,并添加您的电子邮件帐户和基本过滤规则。使用 mbox 或 maildir,但不要同时使用两者。
.fdm.conf
## Accounts and rules for: #> foo@example.com #> bar@gmail.com ## Last edit 21-Dec-09 # Catch-all action (mbox): action "inbox" mbox "%h/mail/INBOX" # Catch-all action (maildir): # action "inbox" maildir "%h/Mail/INBOX" account "foo" imaps server "imap.example.com" user "foo@example.com" pass "supersecret" account "bar" imaps server "imap.gmail.com" user "bar@gmail.com" pass "evenmoresecret" # Match all mail and deliver using the 'inbox' action. match all action "inbox"
这将从列出的帐户收集邮件,并将其投递到我们创建的 INBOX 文件夹中。有关如何连接到其他类型的邮件服务器(例如 POP3)的具体信息,请参阅 fdm(1) 手册页。
.netrc
文件中指定您的登录名和/或密码。密码管理
电子邮件帐户的密码可以以纯文本形式存储在配置文件中,也可以通过 shell 命令从密码管理器或密钥环请求,格式为 $(cmd ...)
使用密码管理器
这是一个使用 pass 的示例
account "foo" imaps server "imap.example.com" user "foo@example.com" pass $(pass foo-email-entry | head -1)
OAuth2 认证,Gmail
fdm 可以使用 GMail 所需的 OAuth2 访问令牌,但它缺乏续订和/或授权 OAuth2 凭据的能力。一个全面的解决方案是使用 oama 实用程序,该实用程序为 IMAP/SMTP 客户端提供续订和授权 OAuth2 凭据的功能。初始设置完成后,访问令牌续订将在后台自动进行,对用户透明。
account "foo" imaps server "imap.gmail.com" user "foo@gmail.com" pass $(oama access foo@gmail.com) oauthbearer
从 cron 运行
虽然上面的示例在交互式使用中效果很好,但从 cron 作业中使用它们会稍微复杂一些,因为调用的一些程序可能需要特定的环境。可以通过使用包装脚本并导出需要的环境变量来解决这个问题。
以下是一些针对此类脚本的技巧
... # for pass export PASSWORD_STORE_DIR=~/.local/var/password-store ... # when using gnome's keyring # secret-tool can't live without these two envvars # so we fake them for the case this script runs in a cron job export DISPLAY=${DISPLAY:-:0} export DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS:-unix:path=/run/user/$UID/bus} ...
测试
一旦您对这个设置感到满意,请尝试手动运行 fdm 来收集您的邮件。
$ fdm -kv fetch
这将使您的邮件在服务器上保持不变,以防出现错误。检查输出以确保一切按计划进行。打开您最喜欢的邮件阅读器 (MUA) 并确保您可以阅读刚刚投递的邮件。
扩展用法
额外过滤
如果您希望来自特定帐户的邮件进入特定的邮箱,您可以将以下行添加到您的 fdm.conf
文件中。从上面的配置文件中,如果您想将来自 bar@gmail.com
的邮件过滤到其自己的文件夹 bar-mail
中,您需要将此添加到现有的 “action” 行下方
action bar-deliver mbox "%h/mail/bar-mail"
如果需要,将 mbox
更改为 maildir
,并确保路径正确。
要激活新的 action,请将其添加到现有的 “match” 行之前
match account bar action bar-deliver
然后,所有发送到 bar@gmail.com
的邮件都将放入 bar-mail
邮件文件夹中。
自动化
由于 fdm 不作为守护进程运行,因此定时邮件获取留给作业调度器,如 cron 或 systemd 计时器。本节将展示两者的实现。
Cron
每 15 分钟从所有帐户获取和分类邮件,并将所有匹配项的日志附加到本地文件
$ crontab -e
... */15 * * * * fdm fetch >> $HOME/[Mm]ail/fdm.log
systemd 计时器
为本地用户设置 fdm 服务,以从所有帐户获取和分类邮件
${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/fdm.service
[Unit] Description=Fetch mail using fdm After=network.target network-online.target dbus.socket Documentation=man:fdm(1) [Service] Type=oneshot ExecStart=/usr/bin/fdm fetch
然后设置计时器,每 15 分钟运行一次该服务
${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/fdm.timer
[Unit] Description=Fetch mail using fdm [Timer] # Uncomment to run the service two minutes after booting # OnBootSec=2m OnUnitActiveSec=15m Persistent=true [Install] WantedBy=timers.target
最后 启动/启用 用户单元 fdm.timer
。