「Fdm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎設定: 情報を更新)
(→‎自動化: systemd タイマーの項目を翻訳して追加)
 
(同じ利用者による、間の1版が非表示)
64行目: 64行目:
   
 
{{Tip|{{ic|.netrc}} ファイルでログイン名とパスワードを指定することもできます。}}
 
{{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}
  +
...
   
 
== テスト ==
 
== テスト ==
90行目: 133行目:
 
これで {{ic|''bar@gmail.com''}} 宛の全てのメールが {{ic|''bar-mail''}} メールフォルダに行くようになります。
 
これで {{ic|''bar@gmail.com''}} 宛の全てのメールが {{ic|''bar-mail''}} メールフォルダに行くようになります。
   
=== cron による自動化 ===
+
=== 自動化 ===
  +
  +
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}} を [[起動/有効化]] します。
[[cron]] ジョブを設定することで定期的にメールをチェックすることができます:
 
$ crontab -e
 
*/15 * * * * fdm fetch >> $HOME/[Mm]ail/fdm.log
 
   
 
== 参照 ==
 
== 参照 ==

2022年11月18日 (金) 02:49時点における最新版

関連記事

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

参照