SEARCH
NEW RPMS
DIRECTORIES
ABOUT
FAQ
VARIOUS
BLOG
DONATE


YUM REPOSITORY

 
 

fetchmail

Section: User Commands (1)
Index 

名前

fetchmail - POP, IMAP, ETRN, ODMR 機能を持つサーバからメールを取得する

 

書式

fetchmail [option...] [mailserver...]
fetchmailconf

 

説明

fetchmailはメールを取得・転送するためのユーティリティです。fetchmailはリモートのメールサーバからメールを取得し、これをローカル (クライアント) マシンの配送システムに転送します。受け取ったメールは、その後 mutt(1), elm(1), Mail(1) など、普通のメールユーザエージェントで扱うことができます。fetchmail ユーティリティはデーモンモードで実行し、指定した時間間隔で 1 つあるいは複数のシステムを繰り返しポーリングすることができます。

fetchmailプログラムは一般的なメール取得プロトコル(POP2, POP3, IMAP2bis, IMAP4, IMAPrev1) のいずれかをサポートしているサーバからメールを集めてくることができます。また、ESMTP の ETRN 拡張と ODMR を使うこともできます。(これらのプロトコルを説明している RFC 全ては、このオンラインマニュアルの最後に列挙します。)

fetchmailは基本的に (SLIP や PPP 等の)オンデマンド TCP/IP 接続上で使うためのものですが、sendmail を使った (送信者開始の) SMTP トランザクションをセキュリティ上の理由から認めないサイトでは、メッセージ転送エージェントとしても役立つかもしれません。

それぞれのメッセージを取得すると、通常 fetchmail は自身が動作しているマシン (localhost) の25 番ポートに SMTP 経由でこのメッセージを配送します。この動作は、ちょうど通常の TCP/IP 接続上でメッセージが渡されたかのように行われます。次に、メールはシステムの MDA (Mail Delivery Agent (メール配送エージェント)、普通は sendmail(8) ですが、システムによってはsmail, mmdf, exim, qmail 等が使われているかもしれません) 経由でローカルに配送されます。したがって、配送制御機構 (.forward ファイル等) は、システムの MDA とローカル配送エージェントを通じて全て通常通り使うことができます。

25 番ポートのリスナはないが、fetchmail のコンパイル時に信頼できるローカル MDA を検知または指定された場合、代わりとしてローカル配信にその MDA を使います。通常、ビルド時に fetchmail は実行可能プログラムprocmail(1)とsendmail(1)のバイナリを探します。

プログラムfetchmailconfが使用可能であれば、このプログラムを使ってfetchmailrc の設定ファイルを楽に設定・編集することができます。このプログラムは X 上で動作し、またシステム上に Python 言語と Tk ツールキットがあることが必要です。単独ユーザモード用に初めて fetchmail を設定する場合には、初心者モード (Novice mode) を使うことをお勧めします。上級者モード (Expert mode) を使うと、マルチドロップ機能を含む fetchmail の設定を完全に制御することができます。どちらの場合でも、`Autoprobe (自動検出)' ボタンを押すと、指定されたメールサーバが最もうまくサポートしているプロトコルを教えてくれ、そのサーバで起こる可能性がある問題も指摘してくれます。

 

一般的な操作

fetchmailの動作はコマンドラインオプションと実行制御ファイル~/.fetchmailrcで制御することができます。実行制御ファイルの文法は後のセクションで説明します(このファイルは fetchmailconf プログラムが編集します)。コマンドラインオプションは、~/.fetchmailrcでの宣言を上書き指定します。

問い合わせは、コマンドラインのオプションの後に指定した全てのサーバに対して行われます。コマンド行でサーバを指定していない場合には、~/.fetchmailrcファイルの `poll' エントリそれぞれに対して問い合わせが行われます。

fetchmailは、スクリプトやパイプラインで使いやすいように、終了時に適切な終了コードを返すようになっています。後述の「終了コード」セクションをご覧ください。

以下のオプションで fetchmail の動作が変わります。一度うまく動作する .fetchmailrc ファイルが設定できれば、その後はこれらのオプションを指定する必要はほとんどないでしょう。

ほとんど全てのオプションには対応するキーワードがあり、これらはfetchmailrcファイルで宣言することができます。

ここでは一部の特殊なオプションは説明しておらず、代わりに後述の「認証」と「デーモンモード」に関するセクションで説明しています。 

一般設定のオプション

-V, --version
お使いのfetchmailのバージョン情報を表示します。メールの取得は行いません。その代わり、fetchmailが実際にサーバに接続した場合に使われるはずのオプション情報全てが、指定されているそれぞれのサーバについて表示されます。パスワードやその他の名称文字列に含まれる表示不可能な文字は、C 言語と同様にバックスラッシュを使ったエスケープシーケンスとして表示されます。このオプションは、オプションが希望通りに設定されていることを確かめる際に便利です。
-c, --check
実際にはメールの取得や削除を行わず、取得待ちのメールがあるかどうかを示すステータスコードだけを返します(後述の「終了コード」を参照)。このオプションはデーモンモードを無効にします (無意味になるため)。複数サイトへの問い合わせはうまく動作しませんし、ETRN や ODMR でも動作しません。既読であるが削除されていないメールがサーバのメールボックスに残っており、かつメール取得のプロトコルが保存されているメッセージと新しいメッセージを区別できない場合には、偽を表す正の値が返されます。つまり、このオプションは IMAP では動作し、POP3 では動作しません。また、POP3 では時々失敗することがあります。
-s, --silent
静粛モード。通常はメール取得の途中に標準エラー出力に出力される、進行状況/ステータスメッセージを全て止めます(しかし、実際のエラーメッセージは止めません)。--verbose オプションはこのオプションを上書きします。
-v, --verbose
詳細表示モード。fetchmailとメールサーバの間でやりとりされた制御メッセージを全て標準出力に出力します。--silent オプションを上書きします。このオプションを 2 つ付けると (-v -v)、追加の診断情報が出力されます。
 

メールの扱いに関するオプション

-a, --all
(キーワード: fetchall)古い (既読) メッセージと新しいメッセージを両方ともメールサーバから取得します。デフォルトでは、サーバが既読の印を付けていないメッセージだけを取得します。POP3 を使う場合、このオプションを指定するとTOP ではなく必ず RETR が使われます。POP2 のメール取得は、--all が常に有効であるかのように動作します(後述の「取得失敗モード」を参照)。このオプションは ETRN と ODMR では動作しません。
-k, --keep
(キーワード: keep)取得したメッセージをリモートのメールサーバに残します。通常は、メールを取得した後にメールサーバのフォルダからメッセージが削除されます。keep オプションを指定すると、取得したメッセージはメールサーバのユーザのフォルダに残ります。このオプションは ETRN と ODMR では動作しません。
-K, --nokeep
(キーワード: nokeep)取得したメッセージをリモートのメールサーバから削除します。このオプションを指定すると、取得したメールは削除されます。.fetchmailrc 内 で keep をデフォルト設定にしている場合には、このオプションが役に立つかもしれません。ETRN や ODMR を使う場合には、このオプションは必ず有効にされます。
-F, --flush
POP3/IMAP 専用のオプションです。新しいメッセージを取得する前に、古い (以前に取得した)メッセージをメールサーバから削除します。このオプションは ETRN と ODMR では動作しません。注意: ローカルの MTA がハングし、fetchmail が異常終了した場合、次回に fetchmail を起動したときに配送されていないメールが消されてしまいます。あなたが良いと思うのはたぶんデフォルトの設定です: `-k' を指定しなければ、fetchmail は配送が成功した後に自動的にメッセージを削除します。
 

プロトコルと問い合わせのオプション

-p, --protocol <proto>
(キーワード: proto[col])リモートのメールサーバと通信するときに使うプロトコルを指定します。プロトコルが指定されなければ、デフォルト値は AUTO です。proto には以下のどれかを指定することができます:
AUTO
IMAP, POP3, POP2 に試します(サポートが組み込まれていないプロトコルは飛ばします)。
POP2
Post Office Protocol 2
POP3
Post Office Protocol 3
APOP
古い形式の MD5 チャレンジ認証付きの POP3 を使います。
RPOP
RPOP 認証付きの POP3 を使います。
KPOP
ポート 1109 番で Kerberos V4 認証付きの POP3 を使います。
SDPS
Demon Internet の SDPS 拡張付きの POP3 を使います。
IMAP
IMAP2bis, IMAP4, IMAP4rev1 のいずれか(fetchmail はこれらの機能を自動的に検出します)。
ETRN
ESMTP の ETRN オプションを使います。
ODMR
On-Demand Mail Relay の ESMTP プロファイルを使います。
ETRN と ODMR を除き、これらの選択オプションは基本的に全て同じ動作です(標準のサーバデーモンと通信し、サーバのメールボックスに配送されているメールを取得します)。ETRN モードを使うと、ESMTP 準拠のサーバ(BSD sendmail のリリース 8.8.0 以降など) に、クラアイントマシンへの送信 SMTP 接続を即座に開かせ、サーバの未配達メールのキューに入っている、宛先がユーザのクライアントマシンになっている全てのメールの転送を開始させることができます。ODMR モードでは ODMR が可能なサーバが必要で ETRN と同様に動作します。ただし、ODMR モードではクライアントマシンに静的 DNS が必要ありません。
-U, --uidl
(キーワード: uidl)必ず UIDL を使うようにします (POP3 の場合のみ有効です)。メッセージの「新しさ」の確認が必ずクライアント側で行われるようになります(UIDL は「unique ID listing (ユニークな ID の列挙)」を表します)。`keep' と一緒に用い、メールボックスを、あるユーザグループ用の新しいニュースを入れておく場所として使ってください。
-P, --port <ポート番号>
(キーワード: port)port オプションを使うと、接続する TCP/IP のポート番号を指定することができます。このオプションが必要となることはほとんどないでしょう。というのも、サポートされている全てプロトコルにはよく知られているデフォルトのポート番号があるからです。
--principal <principal>
(キーワード: principal)principal オプションを使うと、相互認証のための principal を指定することができます。Kerberos 認証付きの POP3 と IMAP の場合に使用できます。
-t, --timeout <秒数>
(キーワード: timeout)timeout オプションを使うと、サーバが応答しない際のタイムアウト時間を秒単位で設定することができます。指定された秒数の間メールサーバがグリーティングメッセージを送ってこないかコマンドに応答しない場合、fetchmail はサーバとの接続を切ります。このようなタイムアウトを使わなければ、fetchmail は落ちているホストからいつまでもメールを取得しようとしてハングアップしてしまうかもしれません。これは fetchmail がバックグラウンドで動作している時には特にうっとうしいでしょう。デフォルトのタイムアウト時間があり、fetchmail -V で表示することができます。与えられた接続で何度も連続してタイムアウトを受けた場合、fetchmail は接続が止められているものと考え、リトライを止めます。これが起こった場合、接続を止められたユーザはメールで通知を受けます。
--plugin <コマンド>
(キーワード: plugin)plugin オプションを使うと、TCP 接続を確立するための外部プログラムを使うことができます。これは SOCKS, SSL, ssh を使う場合やファイアウォール用の特殊な設定が必要なときに便利です。プログラムは $PATH 環境変数内で検索されます。オプションとして、"%h" と "%p" を使って、それぞれホスト名とポート名を引き数として渡すこともできます(補間ロジックは少し原始的で、受け取られる引き数は空白で囲まれているか、文字列の先頭または末尾になければいけないことに注意して下さい)。fetchmail はプラグインの標準入力に書き込みを行い、プラグインの標準出力から読み込みを行います。
--plugout <コマンド>
(キーワード: plugout)前の項の plugin オプションと同じですが、このオプションは SMTP 接続に対してのみ使われます(SMTP 接続ではたぶんプラグインは不要なので、plugin オプションから分離されています)。
-r <フォルダ名>, --folder <フォルダ名>
(キーワード: folder[s])メールサーバ上で、デフォルト以外の指定されたメールフォルダ(またはコンマで区切ったフォルダのリスト) からメールを取得します。フォルダ名の記法はサーバに依存します。このオプションは POP3, ETRN, ODMR では使えません。
--tracepolls
(キーワード: tracepolls)fetchmail が生成する Received 行に、`polling %s account %s' という形式でトレース情報を入れるようにさせます。%s の部分はユーザのリモート名とポーリングレベルに置き換えられます(通常、Received ヘッダにはサーバの本当の名前も含まれます)。これは、受信したアカウントに基づいたメールフィルタリングを容易にするために使うことができます。
--ssl
(キーワード: ssl)メールサーバへの接続を SSL を使って暗号化します。サーバへの接続は、SSL によって守られた接続上で指定した基本プロトコルを使って行われます。ポートが指定されていない場合は、接続は基本プロトコルの SSL 版の既知のポートで試みられます。これは一般的には、基本プロトコルで使われるポートとは異なります。IMAP の場合、基本プロトコルはポート 143 であり、SSL で守られたプロトコルの場合はポート 993 です。
--sslcert <名前>
(キーワード: sslcert)クライアント側の公開 SSL 証明書のファイル名を指定します。SSL による暗号化を行うサーバの一部には、認証のためにクライアント側の鍵と証明書を必要とするものもあります。ほとんどの場合はこれは省略してもかまいません。このオプションは SSL セッションを確立する時にサーバに示す公開鍵証明書の位置を指定します。サーバが必要としなければ、これを指定する必要はありません (指定してもかまいません)。これを必要とするサーバもありますし、要求するけれど必要とはしないサーバもありますし、全く要求しないサーバもあります。これは秘密鍵 (鍵と証明書を一緒にしたファイル) と同じファイルのこともありますが、これはお勧めできません。
--sslkey <ファイル名>
(キーワード: sslkey)クライアント側の秘密 SSL 鍵のファイル名を指定します。SSL による暗号化を行うサーバの一部には、認証のためにクライアント側の鍵と証明書を必要とするものもあります。ほとんどの場合はこれは省略してもかまいません。このオプションは SSL セッションを確立する時にサーバとの署名トランザクションで用いる秘密鍵の位置を指定します。サーバが必要としなければ、これを指定する必要はありません (指定してもかまいません)。これを必要とするサーバもありますし、要求するけれど必要とはしないサーバもありますし、全く要求しないサーバもあります。これは公開鍵 (鍵と証明書を一緒にしたファイル) と同じファイルのこともありますが、これはお勧めできません。鍵を外すためにパスワードが必要な場合には、サーバとのセッションを確立する直前にパスワードを聞かれます。そのため、デーモンモードで使うのは困難です。
--sslproto <名前>
(キーワード: sslproto)ssl プロトコルを強制的に使用します。指定可能な値は `ssl2', `ssl3', `tls1' です。サーバとのデフォルトの接続がうまく行かなかった場合に試して下さい。
--sslcertck
(キーワード: sslcertck)fetchmail がローカルの信用できる証明書に対してサーバ証明書を厳密にチェックするようにします(sslcertpath オプションを見てください)。サーバ証明書が信頼できる署名で (直接的または間接的に)サインされていない場合、SSL 接続は失敗します。このチェックにより、SSL 接続に対して経路の途中にいる人間が行う攻撃を阻止できます。OpenSSL による証明書確認では、CRL は現在サポートされていないかもしれない点に注意してください。このオプションを使うと、システムクロックがいくらか進みます。
--sslcertpath <ディレクトリ名>
(キーワード: sslcertpath)fetchmail がローカルの証明書を探すディレクトリを設定します。デフォルトは OpenSSL のデフォルトのディレクトリです。ディレクトリは OpenSSL が期待するようにハッシュされなければなりません。ディレクトリ内の証明書を追加・修正した場合は、(OpenSSL の tools/ サブディレクトリに入っている)c_rehash ツールを使う必要があります。
--sslfingerprint
(キーワード: sslfingerprint)コロンで区切られた 16 進数表記の 2 組の数字で書かれたサーバ・キーの署名 (キーの MD5 ハッシュ) を指定します。16 進数の数字は大文字でなければなりません。これは OpenSSL が使うデフォルトの形式で、SSL 接続が確立されると fetchmail はこの形式で署名を表示します。このオプションが指定されると、サーバ・キーの署名を与えられた署名と比較します。一致しなかった場合、接続は失敗します。これは経路の途中にいる人間が行う攻撃を阻止できます。
 

配送制御オプション

-S <hosts>, --smtphost <ホスト>
(キーワード: smtp[host])メールを転送するホストのリスト (1 つ以上のホスト名で、コンマで区切ります)を指定します。ホストはリストの順に接続が試みられます。最初の動作しているホストが、今回の動作における転送先対象となります。通常は `localhost' がリストの末尾に暗黙のデフォルト値として追加されています。しかし、Kerberos 認証を使う場合には、fetchmail を実行しているマシンの FQDN がリストの末尾に暗黙のデフォルト値として追加されます。それぞれのホスト名には、ホストの名前の次にポート番号が付いています。ポート番号とホスト名はスラッシュで区切られます。デフォルトのポート番号は 25 (IPv6 では ``smtp'') です。(/ で始まる) 絶対パス名を指定した場合、LMTP 接続を受け付ける UNIX ソケットの名前として解釈されます(これは Cyrus IMAP デーモンでサポートされます)。例:

        --smtphost server1,server2/2525,server3,/var/imap/socket/lmtp

このオプションは ODMR モードで使用することができ、fetchmail に ODMR サーバと SMTP, LMTP レシーバの間のリレーをさせます。

--fetchdomains <ホスト>
(キーワード: fetchdomains)ETRN と ODMR モードにおいて、このオプションは接続が行われた場合にサーバがメールを配送するドメインの一覧を指定します。デフォルトは fetchmail が稼働しているマシンの FQDN です。
-D <ドメイン>, --smtpaddress <ドメイン>
(キーワード: smtpaddress) アドレスに追加されるドメインを指定します。このアドレスは SMTP で送られる RCPT TO 行に入ります。これが指定されなかったときは、SMTP サーバの名前(--smtphost で指定するか、デフォルトの "localhost") が使われます。
--smtpname <ユーザ@ドメイン>
(キーワード: smtpname) SMTP で送られる RCPT TO 行に入れられるドメインとユーザを指定します。デフォルトのユーザは現在のユーザです。
-Z <nnn>, --antispam <nnn[, nnn]...>
(キーワード: antispam) SMTP 受信プログラムからのスパム防止の応答と解釈される、数値形式の SMTPエラーのリストを指定します。値が -1 であれば、このオプションは無効にされます。コマンドラインオプションの場合、リストの値はコンマで区切らなければなりません。
-m <コマンド>, --mda <コマンド>
(キーワード: mda)-mda あるいは -m オプションを使って、(25 番ポートに転送するのではなく)メールを直接 MDA に渡すようにできます。メールを失うのを避けるために、このオプションは、ディスクが溢れている場合やリソース消費エラーなどの場合に0 以外のステータスを返す procmail や sendmail といったMDA とともに使って下さい。0 以外のステータスは fetchmail に配送が失敗したことを知らせ、メッセージがサーバから削除されるのを防止します。fetchmail を root で実行すると、ユーザ ID は MDA 経由でメールを配送する間に対象ユーザのものに設定されます。これが利用できる MDA には"/usr/sbin/sendmail -oem -f %F %T", "/usr/bin/deliver","/usr/bin/procmail -d %T" があります (しかし、通常は後のものは冗長です。なぜならこれは通常、SMTP リスナが転送を行う先だからです)。%T を置いた場所には、MDA コマンドに対してローカル配送アドレスが挿入されます。メールのメッセージの From アドレスは、%F を置いた場所に挿入されます。"sendmail -oem -t" のような、To/Cc/Bcc の内容宛にメールを発送する MDA の呼び出しを用いてはいけません。これをするとメールのループが発生し、あなたが大勢の postmaster から大目玉を食らうことになります。
--lmtp
(キーワード: lmtp)LMTP (Local Mail Transfer Protocol) 経由の配送を行います。このオプションを選択した場合には、smtphost で対象リストに指定した各ホストに対して、サービスのポートを (スラッシュのサフィックスを用いて)明示的に指定しなければなりません。デフォルトポートの 25 は (RFC 2033 によって) 認められていません。
--bsmtp <ファイル名>
(キーワード: bsmtp)取得したメールを BSMTP ファイルに追加します。これは単に、メールを SMTP受信デーモンに渡すときにfetchmail が通常生成するであろう SMTP コマンドを含んでいます。引き数に `-' を指定すると、メールは標準出力に書き込まれます。fetchmail が付け直した MAIL FROM と RCPT TO 行が正しいことの保証はない点に注意してください。後述の「マルチドロップメールボックスの利用と不正使用」の議論における注意事項が適用されます。
 

リソースの制限・制御のためのオプション

-l <最大バイト数>, --limit <最大バイト数>
(キーワード: limit)サイズの最大値を 10 進数で引き数に取ります。このサイズより大きいメッセージは取得されず、サーバ上に残されます(フォアグラウンドのセッションでは、進行状況メッセージで "oversized (サイズ超過)" であると知らされます)。メールの取得に使われるプロトコル(特に fetchall オプションを指定しない IMAP または POP3) によって未読の印を付けることができる場合、明示的に --limit に 0 を指定すると、実行制御ファイルで設定した上限値を全て上書きします。このオプションは、電話料金が高くて変化もするという理由から、メール取得の時間を厳しく制御する必要がある人のためのものです。デーモンモードでは、サイズ超過の通知は呼び出しを行ったユーザに対してメールで行われます(--warning オプションを参照)。このオプションは ETRN と ODMR では使えません。
-w <間隔>, --warnings <間隔>
(キーワード: warnings)時間間隔を秒数で引き数に取ります。デーモンモードで `limit' オプションを付けてfetchmailを呼び出すと、このオプションはサイズを超過しているメッセージに関する警告が呼び出したユーザ (または `postmaster' オプションで指定したユーザ) にメールで送られる時間間隔を制御します。このような通知は常に、サイズを超過しているメッセージが見つかった最初のポーリングの終了時にメールで送られます。その後は、警告時間間隔が経過するまで再通知は止められます(これは、後に続く最初のポーリングの終了時に行われます)。
-b <最大数>, --batchlimit <最大数>
(キーワード: batchlimit)接続をわざと止めてから再接続するまでにSMTP 受信プログラムに送信するメッセージの最大数を指定します(デフォルト値は 0 で、これは無制限を表します)。明示的に --batchlimit に 0 を指定すると、実行制御ファイルで設定されている上限値は全て上書きされます。sendmail(8) は通常、メッセージ終端子を受信した直後にメッセージの配送を始めますが、そんなに素早く応答しない SMTP 受信プログラムもあります。qmail(8) や smail(8) 等の MTA は、配送ソケットが閉じられるまで配送を待つことがあります。fetchmail が巨大なバッチ処理を行っている時には、これはうっとうしい遅れを引き起こすかもしれません。バッチの上限値にゼロでない値を何か設定しておくと、このような遅れを防ぐことができます。このオプションは ETRN と ODMR では動作しません。
-B <上限値>, --fetchlimit <上限値>
(キーワード: fetchlimit)指定されたサーバ 1 つからの 1 度のポーリングで取得できるメッセージ数を制限します。デフォルトでは制限はありません。明示的に --fetchlimit に 0 を設定すると、実行制御ファイルで設定した上限値を全て上書きします。このオプションは ETRN と ODMR では動作しません。
-e <メッセージ数>, --expunge <メッセージ数>
(キーワード: expunge)指定された数のメッセージの後に削除が行われるようにします。POP2 や POP3 の場合には、fetchmail は QUIT を送ってセッションを終わらなければ削除を行うことができません。したがってこのオプションを on にすると、fetchmail は長いメール取得セッションを複数のサブセッションに分割し、各サブセッションの後に QUIT を送ります。これは、回線が切れた時に QUIT と同等の処理を行わないPOP3 サーバで起こる行落ちに対する良い対策になります。IMAP の場合には、fetchmailは削除を即座に行わせるために、削除を行うたびに EXPUNGE コマンドを発行するのが普通です。これはサーバとの通信が不安定な時や高価な時には非常に安全な方法です。というのも、接続が切れてしまった後に同じメールを再び受け取らなくて済むからです。しかしメールボックスが大きい場合には、メッセージを消すたびごとにインデックスを付け直す時のオーバーヘッドで、サーバがかなり大変な目に遭うかもしれません。ですから、接続の信頼性が高い場合には、削除を行う間隔は長くしたほうが良いでしょう。このオプションに整数 N を指定すると、fetchmailは N 回目の削除の時だけ実際の削除を行います。引き数に 0 を指定すると、削除は全く行われなくなります(したがって、実行終了時まで削除は全く行われません)。このオプションは ETRN と ODMR では動作しません。
 

認証に関するオプション

-u <ユーザ名>, --username <ユーザ名>
(キーワード: user[name])メールサーバにログインするときに使うユーザ識別情報を指定します。適切なユーザ識別情報はメールサーバとユーザの両方に依存します。デフォルト値はfetchmailを実行したクライアントマシン上でのログイン名です。
-I <インタフェース指定>, --interface <インタフェース指定>
(キーワード: interface)ポーリングを行う前に、特定のインタフェースデバイスが動作していることと、特定のローカルまたはリモートの IP アドレス(またはアドレス範囲) を持つことを要求します。fetchmailはSLIP や PPP 経由でメールサーバに対して直接確立された point-to-point のTCP/IP リンク上で使われることがよくあります。これは比較的安全なチャネルです。しかし、メールサーバへの他の TCP/IP 経路が存在するとき(例: リンクが別の ISP に接続されているとき)、あなたのユーザ名とパスワードは盗聴に対して脆弱です(特にデーモンモードが自動的にメールをポーリングし、平文のパスワードを予測可能な間隔でネットワーク上に流している場合)。--interface オプションを使うと、これを防ぐことができます。指定されたリンクが上がっていないときや、マッチする IP アドレスに接続されていないときには、ポーリングは飛ばされます。フォーマットは以下です:

       interface/iii.iii.iii.iii/mmm.mmm.mmm.mmm

最初のスラッシュの前のフィールドはインタフェース名です(つまり、sl0, ppp0 等)。2 番目のスラッシュの前のフィールドは許可される IP アドレスです。2 番目のスラッシュの後のフィールドは、許可する IP アドレスの範囲を指定するマスク値です。マスクがない場合には、255.255.255.255 (つまり、完全なマッチ) が指定されたものとして扱われます。このオプションを現在サポートしているのは Linux と FreeBSD だけです。FreeBSD 固有の情報については、後述のmonitor セクションをご覧ください。

-M <インタフェース>, --monitor <インタフェース>
(キーワード: monitor)デーモンモードでは、アクティブでない状態が一定時間続くと、自動的に切断される一時的なリンク (例: PPP 接続) がいつまでも接続したままになる可能性があります。このオプションはアクティブ状態を監視するシステムの TCP/IP インタフェースを指定します。毎回のポーリング間隔の後、リンクが確立しているけれどそのリンク上で他の通信がされていなければ、ポーリングは飛ばされます。しかし、fetchmail がシグナルで起動された場合は、監視のチェックは飛ばされ、無条件にポーリングが行われます。このオプションは現在 Linux と FreeBSD でのみサポートされています。FreeBSD の場合、monitor オプションとinterfaceオプションを root 以外のユーザで動作させるには、SGID kmem してfetchmail のバイナリをインストールしなければなりません。これはセキュリティホールになるかもしれませんが、fetchmail はインタフェースのデータを集めるときだけ実効 GID を kmem グループに設定して動作します。
--auth <タイプ>
(キーワード: auth[enticate])このオプションを使うと認証のタイプを指定することができます(詳しくは「ユーザ認証」の項をご覧ください)。指定可能な値は、any, `password', `kerberos_v5', `kerberos' (非常に正確に言うと `kerberos_v4'), gssapi, cram-md5, otp, ntlm, ssh です。(デフォルトの) any を指定すると、fetchmail は、まず最初にパスワードを必要としない方法(GSSAPI, KERBEROS_IV) を試します。次にパスワードを隠す方法 (CRAM-MD5, X-OTP, NTLM) を探します。そして、サーバがこれらの方法のどれもサポートしていない場合にのみ、パスワードを平文で渡します。それ以外の値は、いろいろな認証方法を強制するために使われます(ssh は認証をさせないようにします)。password, cram-md5, ntlm, otp 以外の値では、fetchmail による通常のパスワード問い合わせをさせないようにします。ssh トンネルのような end-to-end の安全な接続を使っている場合に、ssh を指定して下さい。GSSAPI または K4 を使ったプロトコルを使っている場合は、gssapi または kerberos_v4 を指定して下さい。KPOP プロトコルを選択すると自動的に Kerberos 認証が選択されます。このオプションは ETRN では動作しません。
 

その他のオプション

-f <パス名>, --fetchmailrc <パス名>
~/.fetchmailrc実行制御ファイルとしてデフォルトでない名前を指定します。<パス名> 引き数は "-"(ダッシュ 1 つ、標準入力から設定を読み込むことを意味します)またはファイル名でなければなりません。同時に --version オプションも有効にしていない場合、指定されたファイル引き数は0600 (u=rw,g=,o=) 以外のパーミッションを持っているか、そうでなければ /dev/null でなければなりません。
-i <パス名>, --idfile <パス名>
(キーワード: idfile)POP3 の UID を保存するために使う .fetchids ファイルに別の名前を指定します。
-n, --norewrite
(キーワード: no rewrite)通常、fetchmailは取得したメール中の RFC-822 のアドレスヘッダ(To, From, Cc, Bcc, Reply-To) を編集し、サーバに対してローカルなメールの ID が完全なアドレスに展開されます(@ とメールサーバのホスト名が追加されます)。これにより、クライアントにおけるリプライで宛先を正しくすることが可能になります(このようにしない場合、メーラはクライアントマシンのローカルユーザに送るべきだと考えるかもしれません!)。このオプションはこの書き換えを無効にします。(このオプションは、MTA がメールのヘッダを編集することに対して神経質で、これを止められることを知りたい人々をなだめるために用意しています。しかし一般的には、実際に書き換えを止めるのは良い考えではありません。)ETRN や ODMR を使うときには、書き換えオプションは無効です。
-E <envelope 行>, --envelope <envelope 行>
(キーワード: envelope)このオプションは、fetchmailがメールの envelope アドレスのコピーを運ぶと想定するヘッダを変更します。通常これは `X-Envelope-To' ですが、これは標準ヘッダではないので、実際には別のものになることがあります。後述のマルチドロップアドレス処理に関する議論を参照してください。特殊な場合として、`envelope "Received"' を設定するとsendmail 形式の Received 行を処理することが可能になります。このオプションはデフォルトですが、.fetchmailrc ファイルで`no envelope' を使って Received の処理を動作全体で無効にしていなければ、必ずしも必要はないはずです。
-Q <プレフィックス>, --qvirtual <プレフィックス>
(キーワード: qvirtual)このオプションに割り当てられた文字列プレフィックスは、envelope オプションで指定されたヘッダ内で見つかったユーザ名から削除されます(マルチドロップの名前マッチングかローカルドメインのチェックのどちらかが利用できる場合、これらを行うに削除が行われます)。このオプションはfetchmailを使ってドメイン全体のメールを集めている場合と、お使いの ISP (またはメール転送プロバイダ) がqmail を使っている場合に便利です。qmail の基本機能の 1 つに

`Delivered-To:'

があります。qmail はローカルのメールボックスにメッセージを配達するときには必ず、ユーザ名と envelope recipient のホスト名をこの行に書きます。これは主にメールのループを防ぐために行います。接続されていないサイトに一括でメールを送る qmail の設定を行うため、ISP のメールホストはそのサイトを`Virtualhosts' 制御ファイルに書いておくのが普通であり、これによりそのサイト宛のメールアドレス全てにプレフィックスが追加されます。その結果、'usernameAATTuserhost.userdom.dom.com' 宛に送られたメールの`Delivered-To:' 行は以下のような形になります:

Delivered-To: mbox-userstr-usernameAATTuserhost.userdom.dom.com

ISP は 'mbox-userstr-' プレフィックスを自由に決められますが、よく選ばれるのはユーザのホスト名にマッチする文字列です。オプション `envelope Delivered-To:' を使うことにより、fetchmail に元の envelope recipient を識別させることが安全に行えますが、正しいユーザにメールを配達するには `mbox-userstr-' プレフィックスを取り除かなければなりません。これがこのオプションの目的です。

--configdump
~/.fetchmailrcを処理し、指定されたコマンドラインオプションを全て解釈し、標準出力に設定情報を出力します。設定情報は Python 言語のデータ構造配置になっています。このオプションはfetchmailconfのような Python で書かれた対話的な~/.fetchmailrcエディタと一緒に使うためのものです。

 

ユーザ認証と暗号化

ETRN を除く全てのモードではクライアントの認証が必要です。fetchmailにおける通常のユーザ認証は、ftp(1)の認証機構によく似ています。正しいユーザ ID とパスワードは、メールサーバの内部的なセキュリティシステムに依存します。

メールサーバが、あなたが通常のユーザアカウントを持っている Unix マシンならば、あなたがいつも使っているログイン名とパスワードをfetchmailでも使ってください。サーバとクライアントの両方で同じログイン名を使っている場合、-uオプションでわざわざユーザ ID を指定する必要はありません。というのも、デフォルトの動作ではクライアントマシン上でのログイン名をサーバマシンのユーザ ID として使うからです。サーバマシンでは別のログイン名を使っている場合には、-uオプションでログイン名を指定してください。例えば、'mailgrunt' という名前のマシンでのログイン名が 'jsmith' である場合、以下のようにしてfetchmail を起動することになるでしょう:

fetchmail -u jsmith mailgrunt

fetchmailのデフォルトの動作では、接続が確立される前にユーザにメールサーバのパスワードを問い合わせます。これは最も安全にfetchmailを使う方法であり、パスワードも盗まれにくなります。パスワードは~/.fetchmailrcファイルで指定することもできます。これはデーモンモードやスクリプトでfetchmailを使う場合に便利です。

パスワードを指定されておらず、fetchmail~/.fetchmailrcファイルからパスワードを展開できなかった場合、fetchmailは対話的にパスワードを聞く前にユーザのホームディレクトリの~/.netrcファイルを探します。このファイル中に、ユーザのメールサーバにマッチするエントリがあった場合、そのパスワードが使われます。fetchmail は poll 名にマッチするものを最初に探します。これが見つからなければ、via 名にマッチするものをチェックします。~/.netrcファイルの詳しい文法については、オンラインマニュアルのftp(1)を参照してください。(この機能を使うと、複数のファイルにパスワード情報が分かれることを避けることができます。)

通常のユーザアカウントを与えないメールサーバでは普通、ユーザ ID とパスワードはサーバにメールボックスを与えるときにサーバの管理者が割り当てます。メールボックスのアカウント用の正しいユーザ ID とパスワードが分からなければ、サーバの管理者に連絡しましょう。

古いバージョンの POP3 (RFC1081, RFC1225) はメールサーバ側でrhostsを用いる大雑把な形式の独自の認証をサポートしていました。この RPOP の変種では、パスワードと同等であるユーザごとの固定 ID は、予約ポートとの接続上で平文のまま送信されていました。このとき、PASS コマンドでなく RPOPコマンドを使って、特殊なチェックが必要なことをサーバに知らせていました。fetchmailは RPOP をサポートしています(`protocol RPOP' を指定すると、fetchmail に `PASS' ではなく `RPOP' を送らせることができます) が、これは使わないことを強くお勧めします。この機能は盗聴に弱いため、RFC1460 において削除されました。

RFC1460 で APOP 認証が導入されました。この POP3 の変種では、APOP パスワードをサーバホストに登録します(サーバ上でこれを行うプログラムは、たぶん popauth(8) と呼ばれるものです)。~/.fetchmailrcファイルには、これと同じパスワードを書いてください。fetchmailがログインするたびに、パスワードとサーバにおけるグリーティング時刻の暗号学的に安全なハッシュ値がサーバに送られます。これは、認証データベースのチェックによって検査できます。

お使いの fetchmail が Kerberos のサポート付きで構築されており、かつ Kerberos 認証を指定 (--auth か .fetchmailrc でのauthenticate kerberos_v4 オプションを用います) した場合、fetchmail は問い合わせ開始時に毎回 Kerberos チケットを取得しようとします。注意: poll 名か via 名のどちらかが `hesiod' ならば、fetchmail はメールサーバの検索に Hesiod を使おうとします。

GSSAPI 認証による POP3 や IMAP を使う場合、fetchmail はサーバが RFC1731 または RFC1734 に準拠するGSSAPI 機能を備えていると仮定して使用します。現在、この機能は Kerberos V 上でしかテストされていないので、既に tiket-granting チケットを持っていることを仮定します。標準の --user コマンドや .fetchmailrcuser オプションを使って、主に使っている名前とは別のユーザ名を渡すことができます。

お使いの IMAP デーモンがグリーティング行でPREAUTH レスポンスを返した場合には、fetchmail はこれを通知して、通常の認証手順を飛ばします。これは例えば ssh を明示的に用いて imapd を起動している場合などに便利です。この場合、fetchmail が起動したときにパスワードを問い合わせるのを止めさせるために、そのサイトでの認証の値 `ssh' を宣言できます。

POP3 を使う場合には、サーバは RFC1938 準拠の使い捨てパスワードのチャレンジ文字列を発行し、fetchmail はユーザのパスワードをパスフレーズとして使って、必要とされるレスポンス文字列を生成します。これにより、ネットワーク上に暗号化されていない機密情報を流すことを避けることができます。

Compuserve の RPA 認証 (APOP に似ています) がサポートされています。このサポートを組み込んでいる場合、ホスト名の中に "@compuserve.com" が見つかると、fetchmail はパスワードを平文で送らず、RPA パスフレーズを用いた認証を実行しようとします。

IMAP を使っている場合、(Microsoft Exchange が使う) Microsoft の NTLM 認証 がサポートされます。このサポートを組み込んでいる場合、サーバが機能を示す応答で「AUTH=NTLM」を返すと、fetchmail は (パスワードを平文で送らないで)NTLM 認証を実行しようとします。「ユーザ名@ドメイン名」の形で user オプションを指定してください:「@」の左の部分はユーザ名として渡され、「@」の右の部分は NTLM ドメインとして渡されます。

IPsec を使っている場合には、-T (--netsec) オプションを使うと、外向きの IP 接続が初期化されるときに使われるIP セキュリティリクエストを渡すことができます。これは .fetchmailrc ファイルで `netsec' サーバオプションを使って行うこともできます。どちらの場合でも、オプションの値はinet6_apps ライブラリの net_security_strtorequest() 関数が受け付けるフォーマットの文字列です。

--ssl オプションを使うと SSL で暗号化されたサービスにアクセスできます。これは .fetchmailrc ファイルで "ssl" サーバオプションを使っても行えます。SSL による暗号化を有効にすると、SSL セッションの調停の後に SSL 接続上で問い合わせが行われます。POP3 や IMAP といった一部のサービスでは、SSL による暗号化サービスのために標準プロトコルとは別に既知のポートが定義されています。SSL が有効にされており、かつ明示的にポートが指定されていなければ、暗号化通信のポートは自動的に選択されます。

SSL による暗号化を行うサーバに接続するとき、サーバは身元確認のためにクライアントに証明書を示します。証明書はチェックされ、接続しようとしているサーバの名前が証明書の中の標準名と一致することと、証明書に書かれている有効期限によると現在証明書が有効であることが確かめられます。どちらかのチェックが失敗すると警告メッセージが表示されますが、接続は継続されます。サーバの証明書は特定の認証機関 (CA, Certification Authority) によって署名されている必要はありませんし、「自分で署名した」証明書であってもかまいません。

SSL による暗号化を行うサーバによっては、クライアント側の証明書を要求することがあります。クライアント側の公開 SSL 証明書と秘密 SSL 鍵を指定できます。サーバが証明書を要求したら、クライアントの証明書は身元確認のためにサーバに送られます。サーバによっては正当なクライアントの証明書を要求し、証明書が送られないか正当でなければ接続を拒否するものがあります。サーバによっては、認められている認証機関よる署名がクライアント側の証明書になされていることが必要なものもあります。鍵ファイルと証明書ファイルのフォーマットは、内部的に動作している SSL ライブラリが必要とする形式(一般的には OpenSSL) です。

最後に、SSL の使用について注意書きをします :ネットワーク越しに自分で署名したサーバの証明書を取得するという上で述べたような設定では、消極的な盗み聞きをする相手からは守れますが、積極的に攻撃してくる相手から守るための助けにはなりません。パスワードを平文で送るのに比べれば、かなり改善されますが、中継点にいる相手からの攻撃は(http://www.monkey.org/~dugsong/dsniff/ にあるdsniff のようなツールを使うと特に)簡単に可能であることを知っておかなければなりません。自分のメールボックスのセキュリティを真剣に考えるなら、ssh トンネル (下記の例を参照) をお勧めします。

 

デーモンモード

--daemon <間隔>または-d <間隔>を使うとfetchmailをデーモンモードで実行できます。引き数として、ポーリングの時間間隔を秒数で指定しなければなりません。

デーモンモードでは、fetchmailは自分自身をバックグラウンドでずっと動作させます。つまり、指定された各ホストへの問い合わせと、指定された時間のスリープを繰り返します。

したがって、単に

fetchmail -d 900

を実行すると、~/.fetchmailrcに記述された全てのホスト(キーワード `skip' で明示的に除外されたホストは除きます) に対して15 分ごとに 1 回ポーリングを行います。

`set daemon <interval>' を~/.fetchmailrcファイルに書くことでポーリング間隔を設定することが可能です。ここで、<interval> は秒数を表す整数値です。これを行うと、コマンドラインオプションの--daemon 0 または -d0 で上書きしない限り、fetchmail は必ずデーモンモードで起動します。

ユーザあたり 1 つのデーモンプロセスしか許されません。デーモンモードでは、fetchmailはユーザ単位のロックファイルを作成してこれを保証します。

通常は、バックグラウンドでデーモンを動作している時に fetchmail を呼び出すと、デーモンに対して起動のシグナルを送信し、即座にメールサーバにポーリングさせることができます。(fatchmali を root で実行していれば起動シグナルは SIGHUP で、それ以外のユーザであれば SIGUSR1 です。)起動の動作では、認証の失敗や複数回のタイムアウトによって接続が「刺さっている」ことを示すフラグが全てクリアされます。

オプション--quitは、デーモンを起動させるのではなく、動作しているデーモンを殺します(そのようなプロセスが無ければfetchmailが知らせてくれます)。--quit オプションが唯一のコマンドラインオプションならば、この動作だけを行います。

quit オプションは他のコマンドラインオプションと一緒に使うこともできます。この場合の動作としては、他のオプションと実行制御ファイルを組み合わせて指定されていることを行う前に、動作しているデーモンを全て殺します。

-L <ファイル名>または--logfile <ファイル名>オプション (キーワード: set logfile) を使うと、端末と切り離されている間に発生した状態メッセージを、指定されたログファイル (オプションの後にログファイル名を続けてください) にリダイレクトすることができます。ログファイルは追加モードでオープンされるので、以前のメッセージは削除されません。このオプションは主にデバッグ用の設定の場合に役に立ちます。

--syslogオプション (キーワード: set syslog) を使うと、可能であれば、発生した状態メッセージとエラーメッセージをsyslog(3)システムデーモンに送ります。メッセージは fetchmail の ID, LOG_MAIL の機能、LOG_ERR, LOG_ALERT, LOG_INFOいずれかの優先度と一緒に記録されます。このオプションは、サーバからメールを取得している間のデーモンの状態と結果を示す状態メッセージとエラーメッセージを記録するためのものです。この場合でも、コマンドラインオプションと .fetchmailrc の処理に対するエラーメッセージは標準エラー出力か指定されたログファイルに書かれます。--nosyslogオプションは、これが~/.fetchmailrc 内で有効にされているか、-L <ファイル名>または--logfile <ファイル名>オプションが使われているものとしてsyslog(3)の使用を無効にします。

-Nまたは--nodetachオプションは、デーモンプロセスの制御端末からのバックグラウンド化や切り離しを止めます。これは主にデバッグ時に有効です。このオプションは logfile オプションも無効にしてしまう点に注意してください(たぶんこれではいけないのですが)。

デーモンモードで動作して POP2 や IMAP2bis サーバに対してポーリングしている時には、一時的エラー (DNS 参照失敗や sendmail の配送拒否など) が起こると次のポーリング周期の間には fetchall オプションが有効となります。これは頑健さを実現する機能です。つまり、メッセージを取得できた(そしてメールサーバでは既読の印が付けられた) けれど、一時的エラーのためにローカルでは配送されなかった場合、そのメールは次のポーリング周期のときに再び取得されます。(IMAP の仕組みではメッセージは配達されるまで消去されません。したがって、このような問題は起こりません。)

fetchmail がデーモンモードで動作している時に~/.fetchmailrc ファイルを touch したり変更すると、これは次回のポーリングが始まる時に検出されます。~/.fetchmailrc の変更が検出されると、fetchmail はこのファイルを読み込み直し、自分自身を最初から起動し直します(exec(2) を使います。新しく動作する fetchmail には、状態に関するそれまでの情報は一切残りません)。~/.fetchmailrc ファイルの文法に違反していると、新しい fetchmail は起動時に黙って静かに消えてしまうでしょう。

 

管理用オプション

--postmaster <ユーザ名>オプション (キーワード: set postmaster) は、ローカルでメールを受け取る適切なユーザが見つからなかった場合に、マルチドロップメールが転送される最終地点になるユーザ名を指定します。通常、これは単に fetchmail を起動したユーザです。起動したユーザが root であれば、このオプションのデフォルト値はユーザ `postmaster' になります。postmaster のユーザ名を空の文字列に設定すると、このようなメールは破棄されます。

--nobounceオプションは、RFC1894 準拠のエラーメッセージのうち、送信者に戻される差戻しエラー (bouncing error) の通常の動作を止めます。nobounce が有効な場合、メッセージは送信者ではなく postmaster に送られます。

--invisibleオプション (キーワード: set invisible) は fetchmail を見えなくしようとします。通常、fetchmail は他の MTA と同じように振舞います。つまり、送信の経路が記述されている Received ヘッダをメッセージ全てに書き込み、転送先の MTA に、fetchmail そのものが実行されているマシンからメールが来たことを知らせます。invisible オプションが有効である場合は、Received ヘッダは付けられず、fetchmail は転送先の MTA をだまして、メールがメールサーバのホストから直接届いたと思わせようとします。

--showdotsオプション (キーワード: set showdots) は、たとえ現在の端末 (tty) が標準出力でない場合(例えばログファイルの場合) でも、進捗状況を表すドットを表示する。fetchmail バージョン 5.3.0 を起動した場合、デフォルトでは進捗状況を表すドットは標準出力にしか表示されません。

--tracepollsオプションを指定することにより、fetchmail に対して"polling {label} account {user}" という形式の情報をReceived ヘッダに加えるように指示することができます。ここで、{label} は (指定された設定ファイル、通常は ~/.fetchmailrc での) アカウントラベルです。また、{user} はメールサーバにログオンするためのユーザ名です。このヘッダは、役立つヘッダ情報のない E メールをフィルタリングしたり、アカウント毎のメールを別々のメールボックスにソートして入れるのに使うことができます(例えば、メーリングリストが運営されているサーバにアカウントがあり、そのアカウントを使ってメーリングリストを購読している場合に使うことができます)。デフォルトで