SEARCH
NEW RPMS
DIRECTORIES
ABOUT
FAQ
VARIOUS
BLOG
DONATE




YUM REPOSITORY

 
 

MAN page from TurboLinux man-pages-ja-20020715-1.noarch.rpm

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 メールをフィルタリングしたり、アカウント毎のメールを別々のメールボックスにソートして入れるのに使うことができます(例えば、メーリングリストが運営されているサーバにアカウントがあり、そのアカウントを使ってメーリングリストを購読している場合に使うことができます)。デフォルトでは、このようなヘッダは追加されません。これは.fetchmailrcでは `tracepolls' というキーワードになります。

 

取得失敗モード

fetchmail がメールサーバと対話する際に使うプロトコルは、かなり安全です。25 番ポートへの転送を行う通常の操作では、クライアント上の SMTP 受信プログラムが fetchmail に対して配送するメッセージを受け取ったことを知らせたり、スパム防御のために拒否したりするまでは、(削除の印が付いていたとしても) ホスト上のいかなるメッセージも消されません。

しかし、MDA に転送する時には、エラーの可能性はずっと高くなりますMDA のなかには「安全」なものもあり、配送エラーの場合や一時的なリソース資源を使い果たした場合にも、0 以外のステータスを必ず返してくれます。有名なprocmail(1)プログラムは、このような動作をします。sendmail(1)やexim(1)のようなメール転送エージェントとしてデザインされた大部分のプログラムも、このような動作をします。これらのプログラムは信頼できる積極的な返答を返してくれるので、メールを失うリスクを負うことなく、mda オプションをつけて使うことができます。しかし安全でない MDA では、配送が失敗した場合でも 0 を返します。このような事が起これば、メールがなくなるでしょう。

fetchmail の通常モードは、「新しい」メッセージだけをダウンロードしようとし、サーバから既に直接読み出した(あるいは、以前に fetchmail --keep を使って受け取った)メールには関与しません (削除もしません)。しかし、--all を指定していない場合でさえ、サーバ上にある既読のメールが取得される (そして削除される) ことがあることにお気づきになるでしょう。このようなことが起こる理由はいくつかあります。

まず POP2 を使っている場合が考えられます。POP2 プロトコルには、メッセージの「新規」や「既読」の状態を表現する方法がありません。したがって、fetchmail は必ず全てのメッセージを新しいものとして扱わなければなりません。しかし、POP2 は古くて使われなくなっているので、これが原因のことはあまりないでしょう。

POP3 の場合には、RFC1725 を恨んでください。このバージョンの POP3 プロトコルの仕様ではLAST コマンドが無くなっているのですが、一部の POP サーバがこれに準拠しているのです(これを調べるには、メールサーバに対して fetchmail -v を実行して、問い合わせの最初の方で行われる LAST コマンドへの応答を見てください)。fetchmail のコードではPOP3 の UID 機能を使って埋め合わせをしようとしています。これは、それぞれのセッションで見たメッセージの識別子を、次のセッションまで .fetchids に保存しておくという方法です。しかしこの方法では、他のクライアントで見たメッセージや、ホスト上のメーラで直接読まれたけれどその後で消されていないメッセージまでは追いかけられません。IMAP に乗り換える方がいいでしょう。

他に起こる可能性がある POP3 の問題として、メールボックスの途中にメッセージを挿入するサーバが考えられます(VMS のメールの実装の一部に、このようなものがあると言われています)。fetchmail のコードでは、新しいメールはメールボックスの最後に追加されることを想定しています。これが成り立っていなければ、古いメッセージの一部が新しいものとして扱われることがありますし、その逆も起こります。この問題を真っ当に解決する唯一の方法は、IMAP に乗り換えることです。

POP3 の別の問題として、ユーザのホームディレクトリに一時ファイルが作成できない場合に、一部の POP3 サーバは文書化されていない応答を返すため、fetchmail が間違って「No mail」と報告してしまうことがあります。

IMAP のコードでは、サーバ上の \Seen の有無を使ってメッセージが新しいかどうかを決めています。Unix の場合、fetchmail は IMAP サーバがメールユーザエージェントが設定したBSD 形式の Status フラグに注目し、適当な時にこれらを使って \Seen フラグを設定することを期待します。これは IMAP の RFC の仕様にはありませんが、我々が知る限りの Unix 用 IMAP サーバは全てこれを行います。これを行わないサーバでつまずいたときには、ホスト上の既読のメッセージがサーバには新しく見えると言った症状が現われるでしょう。この場合 (あまり起こりませんが) には、fetchmail --keep で取得したメッセージだけが消されず、かつ既読の印が付けられます。

ETRN と ODMR モードでは、fetchmail は実際にはメールを取得しません。その代わりに、サーバの SMTP リスナに対して、クライアントに SMTP 経由のキューのフラッシュを開始するように指示します。したがって、未配送のメッセージしか送りません。

 

スパムフィルタリング

SMTP リスナの多くでは、指定したドメインから送られてくる不要なメールをブロックする「スパムフィルタ (spam filter)」を管理者が設定できます。この機能を呼び出す MAIL FROM あるいは DATA 行は、(残念なことに) リスナによって異なる SMTP の応答を引き出します。

最近のバージョンのsendmailはエラーコード 571 を返します。この返し値は RFC1893 によって "Delivery not authorized, message refused"として与えられています。

RFC821 から置き換えられた現在のドラフトによると、このような状況で返すべき正しい値は、550 "Requested action not taken: mailbox unavailable" とされています(このドラフトでは "[E.g., mailbox not found, no access, orcommand rejected for policy reasons]." を追加しています)。

eximという MTA は 501 "Syntax error in parameters or arguments" を返しますが、これはもうすぐ 550 に変更されます。

postfixという MTA はスパム拒否の応答として 554 を返します。

fetchmail のコードは応答のリストのいずれかに該当するメッセージを認識・破棄します。このリストはデフォルトでは [571, 550, 501, 554] ですが、`antispam' オプションを使って設定することができます。fetchmail がメールを破棄してしまう状況は3 つしかありませんが、これはそのうちの 1 つです(残りは後述の 552, 553 エラーの場合と、マルチドロップされたメッセージで既に処理されているメッセージ ID を持つものを破棄する場合です)。

fetchmailが IMAP サーバからメールを取得する場合に antispam の応答が検出されると、antispam ヘッダを取得した後、メッセージ本体を読むことなく即座にメッセージを拒否します。したがって、spam メッセージの本体をダウンロードする分の課金を支払うことはありません。

spambounce オプションが有効になっている場合に、メールがスパム防御を受けると、差出人にメールを受け取らなかったことを知らせるRFC1892 の差戻しメッセージが送られます。

 

SMTP/ESMTP のエラー処理

先程説明したスパム防御以外にも、fetchmail は以下の SMTP/ESMTP のエラー応答に対して特殊な動作を行います:
452 (システムのディスクが不十分です)
後で取得できるようにサーバのメールボックスにメッセージを残します。
552 (メッセージが固定の最大メッセージサイズを越えました)
サーバからメッセージを削除します。差出人に差戻しメールを送ります。
553 (送信ドメインが不正です)
サーバからメッセージを削除します。差出人に差戻しメールを送ります。

他のエラーでは、差出人に差戻しメールが送られます。

 

実行制御ファイル

fetchmail を設定する好ましい方法は、.fetchmailrc をホームディレクトリに作成することです(これはテキストエディタで直接行なうこともできますし、fetchmailconf を使って対話的に行なうこともできます)。コマンドライン引き数と、このファイル中の引き数が重なっている場合には、コマンドライン引き数の方が優先されます。

パスワードの機密を守るため、--version オプションが有効でない場合には、~/.fetchmailrc のパーミッションは600 (u=rw,g=,o=) でなければなりません。600 以外の場合には、fetchmailは、エラー出力を行って終了します。

fetchmailが引き数なしで実行される場合、.fetchmailrc ファイルは実行されるコマンドのリストとして読むことができます。 

実行制御の記法

コメントは '#' で始まり、その行の最後まで続きます。そうでない場合、このファイルはフリーフォーマットかつトークン指向の文法で書かれた、一連のサーバエントリか動作全体のオプションの記述で構成されます。

トークンには 4 種類あります: すなわち、文法キーワード、数字 (つまり10進数を並べたもの)、クォートされていない文字列、クォートされた文字列です。クォートされた文字列はダブルクォートで囲まれ、空白文字を含むことができます(クォートされた数値は文字列として扱われます)。クォートされていない文字列は、空白で区切られる任意のトークンであり、数値やクォートされた文字列でなく、特殊文字 `,', `;', `:', `=' も含まないものです。

任意の数の空白文字はサーバエントリ中のトークンを区切りますが、それ以外には無視されます。標準の C 言語形式のエスケープ文字 (\n, \t, \b, 8進数, 16進数) を用いて表示不可能な文字列や文字列の区切り文字を文字列中に埋め込むことができます。

各サーバエントリは、キーワード `poll' または `skip'、これに続くサーバ名、その後に続くサーバオプション、さらにその後に続く任意の数のユーザ記述から構成されます。注意: 一番起こしやすい文法エラーの原因は、ユーザオプションとサーバオプションを混ぜてしまうことです。

後方互換性のため、キーワード `server' は `poll' と同義になります。

英語に似せるため、ノイズワード `and', `with', `has', `wants', `options' をエントリ中の任意の場所で使うことができます。これらは無視されますが、エントリがずっと読みやすくなります。区切り文字 ':', ';', ',' も同じく無視されます。

 

poll 対 skip

`poll' を指定すると、fetchmail が引き数なしで実行した時、このホストへの問い合わせが行われます。`skip' を指定すると、コマンドラインで明示的に指定しない限りfetchmail はこのホストにポーリングを行いません。(`skip' を使うと、テスト用エントリで安全に実験を行なうことや、一時的に落ちているホスト用のエントリを簡単に無効にすることができます。)

 

キーワード/オプションのまとめ

以下は正式なオプションです。大括弧 ([]) で括られているキーワードサフィックスは省略可能です。コマンドラインオプションに対応するものの後には、`-' と適切なオプション文字があります。

正式な動作全体のオプションを以下に示します:

キーワード オプション機能

set daemon バックグラウンドでのポーリング間隔を秒数で設定します。
set postmaster 最終的なメール受取人の名前を指定します。
set no bouncemail送信者ではなく、postmaster にエラーメールを送ります。
set no spambounceスパム防御を受けたときに差戻しメールを送ります。
set logfile エラーメッセージと状態メッセージを書き込むファイル名
set idfile UID リストを格納するファイル名。
set syslog syslog(3) を使ったエラーのログ取得を行います。
set nosyslog syslog(3) を使ったエラーのログ取得を止めます。
set properties fetchmail が無視する文字列の値 (拡張スクリプトが使うことがあります)。

以下の正式なサーバオプションを示します:

キーワード オプション機能

via メールサーバの DNS 名を指定します。これは poll 名を上書きします。
proto[col]-pプロトコルを指定します (大文字・小文字は関係ありません):POP2, POP3, IMAP, APOP, KPOP。
local[domains]ローカルとして扱うドメインを指定します。
port -PTCP/IP のサービスポートを指定します。
auth[enticate]認証のタイプを設定します (デフォルト値は `password')。
timeout -tサーバが動作していない時のタイムアウト値を秒数で指定します(デフォルト値は 300)。
envelope-Eエンベロープアドレスのヘッダ名を指定します。
no envelopeエンベロープアドレスの検索を無効にします。
qvirtual-Qユーザ名から取り除く、qmail のバーチャルドメインのプレフィックス。
aka メールサーバの別の DNS 名
interface-Iサーバへのポーリングを行うためには立ち上がっていなければならないIP インタフェースを指定します。
monitor -M動作を監視する IP アドレスを指定します。
plugin サーバ接続を確立するためのコマンドを指定します。
plugout リスナ接続を確立するためのコマンドを指定します。
dns マルチドロップ用の DNS 参照を有効にします (デフォルト)。
no dns マルチドロップ用の DNS 参照を無効にします。
checkaliasマルチドロップのために IP アドレスによる比較を行います。
no checkaliasマルチドロップのために名前による比較を行います (デフォルト)。
uidl -UPOP3 で必ずクライアント側で UIDL を使うようにします。
no uidl POP3 での UIDL の使用を止めます (デフォルト)。
interval このサイトだけを N ポーリングサイクル毎にチェックします。N は数値の引き数です。
netsec IPsec セキュリティオプション要求を渡します。
principal Kerberos 認証の principal を設定します(imap と kerberos の場合にのみ有効です)。

正式なユーザオプションを以下に示します:

キーワード オプション機能

user[name]-uリモートのユーザ名を設定します(name の後に `here' があると、ローカルのユーザ名です)。
is ローカルとリモートのユーザ名を繋ぎます。
to ローカルとリモートのユーザ名を繋ぎます。
pass[word]リモートアカウントのパスワードを指定します。
ssl SSL による暗号化を使い、指定された基本プロトコルを使ってサーバと接続します。
sslcert クライアント側の公開 SSL 証明書を指定します。
sslkey クライアント側の秘密 SSL 鍵を指定します。
sslproto 接続のために ssl プロトコルを使わせます。
folder -r問い合わせをするリモートのフォルダを指定します。
smtphost-S転送先の SMTP ホスト (群) を指定します。
fetchdomainsメールを取得するドメインを指定します。
smtpaddress-DRCPT TO 行に書くドメインを指定します。
smtpnameRCPT TO 行に書くユーザとドメインを指定します。
antispam-Zスパム防御と解釈される SMTP の返し値を指定します。
mda -mローカルの配送に使う MDA を指定します。
bsmtp -o追加する BSMTP バッチファイルを指定します。
preconnectそれぞれの接続の前に実行するコマンド。
postconnectそれぞれの接続の後に実行するコマンド。
keep -k既読のメッセージをサーバから削除しません。
flush -F問い合わせの前に既読のメッセージを全てフラッシュします。
fetchall-a既読・未読にかかわらず全てのメッセージを取得します。
rewrite リプライのために目的アドレスを書き換えます (デフォルト)。
stripcr 行末からキャリッジリターン文字を取り除きます。
forcecr 行末にキャリッジリターン文字を強制します。
pass8bitsESMTP リスナに対し、BODY=8BITMIME を強制します。
dropstatusやってくるメールから Status 行と X-Mozilla-Status 行を取り除きます。
dropdeliveredやってくるメールから Delivered-To 行を取り除きます。
mimedecodequoted-printable を 8ビットの MIME 形式のメッセージに変換します。
idle 各ポーリングの後、新しいメッセージを待つアイドル時間 (IMAP 専用)。