fdm

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

fdm (fetch and deliver mail) はメールを取得・フィルタリングするシンプルなプログラムです。同じ用途で使われる他のプログラムと比べて、Mutt と同じような設計思想で作られています。

インストール

fdm パッケージをインストールしてください。

設定

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 ページを参照してください。

ヒント: .netrc ファイルでログイン名とパスワードを指定することもできます。

パスワードマネジメント

メールアカウントのパスワードは、設定ファイルにプレーンテキストで保存するか、シェルコマンドでパスワードマネージャーやキーリングから要求することができます。$(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"

必要に応じて mboxmaildir に変更したり、パスを確かめて下さい。

新しいアクションを有効にするために、既存の "match" 行の前に追加を追加:

match account bar action bar-deliver

これで bar@gmail.com 宛の全てのメールが bar-mail メールフォルダに行くようになります。

自動化

fdm はデーモンとして動作しないので、メールの時間指定は cronsystemd タイマー のようなジョブスケジューラに任されています。 このセクションでは、その両方の実装を紹介します。

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起動/有効化 します。

参照