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)
の man ページを参照してください。
パスワードマネジメント
メールアカウントのパスワードは、設定ファイルにプレーンテキストで保存するか、シェルコマンドでパスワードマネージャーやキーリングから要求することができます。$(cmd ...)
方式
パスワードマネージャーの使用
以下は、passを使った例です。
account "foo" imaps server "imap.example.com" user "foo@example.com" pass $(pass foo-email-entry | head -1)
Gmail の OAuth2 認証
fdm は OAuth2 アクセストークンを使用することができ、gmail でも使用することができますが、OAuth2 認証情報の更新や認証の機能が欠けています。包括的な解決策としては、mailctl ユーティリティを使用することで、IMAP/SMTP クライアントに OAuth2 認証情報の更新と認証の機能を提供することができます。
設定例:
account "foo" imaps server "imap.gmail.com" user "foo@gmail.com" pass $(mailctl access foo@gmail.com) oauthbearer
アクセストークンの更新はユーザーから見えないようにバックグラウンドで自動的に行われます。 'mailctl は AUR からバイナリパッケージとして入手できます: mailctl-binAUR
cron からの実行
上記の例はインタラクティブに使用する分には問題ありませんが、cron ジョブから使用する場合は少し複雑です。 というのも、呼び出されるプログラムのいくつかは、特定の環境を期待することがあるからです。 ラッパー・スクリプトを使用し、必要な環境変数をエクスポートすることで、この問題を回避することができます。 ここでは、そのようなスクリプトのためのいくつかのトリックを紹介します。
... # パス export PASSWORD_STORE_DIR=~/.local/var/password-store ... # gnome のキーリングを使用する場合 # secret-tool はこの2つの envar が必要です # そこで、このスクリプトが cron ジョブで実行されるために、それらを偽造します。 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 のユーザビリティを向上させる補助機能。
フィルタリングの追加
特定のアカウントからのメールを特定のメールボックスに保存したい場合、以下の行を fdm.conf
ファイルに追加します。上記の設定ファイルなら、bar@gmail.com
のメールを bar-mail
フォルダに振り分けたい場合、既存の "action" 行の下に以下を追加してください:
action bar-deliver mbox "%h/mail/bar-mail"
必要に応じて mbox
を maildir
に変更したり、パスを確かめて下さい。
新しいアクションを有効にするために、既存の "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
を 起動/有効化 します。