「Fdm」の版間の差分
(en:fdmへの転送ページ) |
(→自動化: systemd タイマーの項目を翻訳して追加) |
||
(2人の利用者による、間の6版が非表示) | |||
1行目: | 1行目: | ||
+ | {{DISPLAYTITLE:fdm}} |
||
− | #redirect[[en:fdm]] |
||
+ | [[Category:メールサーバー]] |
||
+ | [[Category:メール取得エージェント]] |
||
+ | [[en:Fdm]] |
||
+ | {{Related articles start}} |
||
+ | {{Related|Alpine}} |
||
+ | {{Related|msmtp}} |
||
+ | {{Related|Mutt}} |
||
+ | {{Related|Postfix}} |
||
+ | {{Related|SSMTP}} |
||
+ | {{Related articles end}} |
||
+ | '''fdm''' (''fetch and deliver mail'') はメールを取得・フィルタリングするシンプルなプログラムです。同じ用途で使われる他のプログラムと比べて、[[Mutt]] と同じような設計思想で作られています。 |
||
+ | |||
+ | == インストール == |
||
+ | |||
+ | {{Pkg|fdm}} パッケージを[[インストール]]してください。 |
||
+ | |||
+ | == 設定 == |
||
+ | |||
+ | '''fdm''' は設定ファイルを通じて構成できます。 |
||
+ | デフォルトは {{ic|~/.fdm.conf}} または {{ic|/etc/fdm.conf}} 存在しない場合 |
||
+ | 詳細については、マニュアル ページ {{man|1|fdm}}、{{man|5|fdm.conf}}、および |
||
+ | {{ic|/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} |
||
+ | |||
+ | === 最終設定 === |
||
+ | |||
+ | {{ic|.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) に接続する方法は {{ic|fdm(1)}} の man ページを参照してください。 |
||
+ | |||
+ | {{Tip|{{ic|.netrc}} ファイルでログイン名とパスワードを指定することもできます。}} |
||
+ | |||
+ | == パスワードマネジメント == |
||
+ | |||
+ | メールアカウントのパスワードは、設定ファイルにプレーンテキストで保存するか、シェルコマンドでパスワードマネージャーやキーリングから要求することができます。{{ic|$(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 認証情報の更新や認証の機能が欠けています。包括的な解決策としては、[https://github.com/pdobsan/mailctl mailctl] ユーティリティを使用することで、IMAP/SMTP クライアントに OAuth2 認証情報の更新と認証の機能を提供することができます。 |
||
+ | |||
+ | 設定例: |
||
+ | |||
+ | account "foo" imaps server "imap.gmail.com" |
||
+ | user "foo@gmail.com" |
||
+ | pass $(mailctl access foo@gmail.com) |
||
+ | oauthbearer |
||
+ | |||
+ | アクセストークンの更新はユーザーから見えないようにバックグラウンドで自動的に行われます。 |
||
+ | '''mailctl'' は AUR からバイナリパッケージとして入手できます: {{AUR|mailctl-bin}} |
||
+ | |||
+ | === 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 のユーザビリティを向上させる補助機能。 |
||
+ | |||
+ | === フィルタリングの追加 === |
||
+ | |||
+ | 特定のアカウントからのメールを特定のメールボックスに保存したい場合、以下の行を {{ic|fdm.conf}} ファイルに追加します。上記の設定ファイルなら、{{ic|''bar@gmail.com''}} のメールを {{ic|''bar-mail''}} フォルダに振り分けたい場合、既存の "action" 行の下に以下を追加してください: |
||
+ | |||
+ | action ''bar-deliver'' mbox "%h/mail/''bar-mail''" |
||
+ | |||
+ | 必要に応じて {{ic|mbox}} を {{ic|maildir}} に変更したり、パスを確かめて下さい。 |
||
+ | |||
+ | 新しいアクションを有効にするために、既存の "match" 行の前に追加を追加: |
||
+ | |||
+ | match account ''bar'' action ''bar-deliver'' |
||
+ | |||
+ | これで {{ic|''bar@gmail.com''}} 宛の全てのメールが {{ic|''bar-mail''}} メールフォルダに行くようになります。 |
||
+ | |||
+ | === 自動化 === |
||
+ | |||
+ | fdm はデーモンとして動作しないので、メールの時間指定は [[cron]] や [[systemd/タイマー|systemd タイマー]] のようなジョブスケジューラに任されています。 |
||
+ | このセクションでは、その両方の実装を紹介します。 |
||
+ | |||
+ | ==== cron による自動化 ==== |
||
+ | |||
+ | すべてのアカウントから 15 分ごとにメールを取得して並べ替え、一致するすべてのログをローカル ファイルに追加します。: |
||
+ | {{hc|$ crontab -e| |
||
+ | ... |
||
+ | */15 * * * * fdm fetch >> $HOME/[Mm]ail/fdm.log |
||
+ | }} |
||
+ | |||
+ | ==== systemd タイマー ==== |
||
+ | |||
+ | ローカル ユーザーがすべてのアカウントからメールを取得して並べ替えるように fdm サービスをセットアップします。: |
||
+ | {{hc|${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/fdm.service|<nowiki> |
||
+ | [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 |
||
+ | </nowiki>}} |
||
+ | |||
+ | 次に、15 分ごとにサービスを実行するようにタイマーを設定します。: |
||
+ | {{hc|${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/fdm.timer|<nowiki> |
||
+ | [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 |
||
+ | </nowiki>}} |
||
+ | |||
+ | 最後にユーザーユニット {{ic|fdm.timer}} を [[起動/有効化]] します。 |
||
+ | |||
+ | == 参照 == |
||
+ | |||
+ | *[https://github.com/nicm/fdm fdm の公式サイト (github)] |
||
+ | *[https://lists.sourceforge.net/lists/listinfo/fdm-users fdm-users メーリングリスト] |
2022年11月18日 (金) 02:49時点における最新版
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
を 起動/有効化 します。