POP, IMAP, ETRN, ODMR 機能を持つサーバからメールを取得する
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
-s, --silent
-v, --verbose
fetchmail
とメールサーバの間でやりとりされた制御メッセージを
全て標準出力に出力します。
--silent オプションを上書きします。
このオプションを 2 つ付けると (-v -v)、追加の診断情報が出力されます。
-a, --all
-k, --keep
-K, --nokeep
-F, --flush
-p, --protocol <proto>
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
-P, --port <ポート番号>
--principal <principal>
-t, --timeout <秒数>
--plugin <コマンド>
--plugout <コマンド>
-r <フォルダ名>, --folder <フォルダ名>
--tracepolls
--ssl
--sslcert <名前>
--sslkey <ファイル名>
--sslproto <名前>
--sslcertck
--sslcertpath <ディレクトリ名>
--sslfingerprint
-S <hosts>, --smtphost <ホスト>
--fetchdomains <ホスト>
-D <ドメイン>, --smtpaddress <ドメイン>
--smtpname <ユーザ@ドメイン>
-Z <nnn>, --antispam <nnn[, nnn]...>
-m <コマンド>, --mda <コマンド>
--lmtp
--bsmtp <ファイル名>
-l <最大バイト数>, --limit <最大バイト数>
-w <間隔>, --warnings <間隔>
fetchmail
を呼び出すと、このオプションはサイズを超過しているメッセージに関する警告が
呼び出したユーザ (または `postmaster' オプションで指定したユーザ) に
メールで送られる時間間隔を制御します。
このような通知は常に、サイズを超過しているメッセージが見つかった
最初のポーリングの終了時にメールで送られます。
その後は、警告時間間隔が経過するまで再通知は止められます
(これは、後に続く最初のポーリングの終了時に行われます)。
-b <最大数>, --batchlimit <最大数>
-B <上限値>, --fetchlimit <上限値>
-e <メッセージ数>, --expunge <メッセージ数>
fetchmail
は削除を即座に行わせるために、
削除を行うたびに EXPUNGE コマンドを発行するのが普通です。
これはサーバとの通信が不安定な時や高価な時には非常に安全な方法です。
というのも、接続が切れてしまった後に
同じメールを再び受け取らなくて済むからです。
しかしメールボックスが大きい場合には、
メッセージを消すたびごとにインデックスを付け直す時のオーバーヘッドで、
サーバがかなり大変な目に遭うかもしれません。
ですから、接続の信頼性が高い場合には、
削除を行う間隔は長くしたほうが良いでしょう。
このオプションに整数 N を指定すると、
fetchmail
は N 回目の削除の時だけ実際の削除を行います。
引き数に 0 を指定すると、削除は全く行われなくなります
(したがって、実行終了時まで削除は全く行われません)。
このオプションは ETRN と ODMR では動作しません。
-u <ユーザ名>, --username <ユーザ名>
fetchmail
を実行したクライアントマシン上でのログイン名です。
-I <インタフェース指定>, --interface <インタフェース指定>
fetchmail
は
SLIP や PPP 経由でメールサーバに対して直接確立された point-to-point の
TCP/IP リンク上で使われることがよくあります。
これは比較的安全なチャネルです。
しかし、メールサーバへの他の TCP/IP 経路が存在するとき
(例: リンクが別の ISP に接続されているとき)、
あなたのユーザ名とパスワードは盗聴に対して脆弱です
(特にデーモンモードが自動的にメールをポーリングし、
平文のパスワードを予測可能な間隔でネットワーク上に流している場合)。
--interface オプションを使うと、これを防ぐことができます。
指定されたリンクが上がっていないときや、
マッチする IP アドレスに接続されていないときには、
ポーリングは飛ばされます。
フォーマットは以下です:
-M <インタフェース>, --monitor <インタフェース>
だけ
実効 GID を kmem グループに設定して動作します。
--auth <タイプ>
-f <パス名>, --fetchmailrc <パス名>
~/.fetchmailrc
実行制御ファイルとしてデフォルトでない名前を指定します。
<パス名> 引き数は -
(ダッシュ 1 つ、標準入力から設定を読み込むことを意味します)
またはファイル名でなければなりません。
同時に --version オプションも有効にしていない場合、
指定されたファイル引き数は
0600 (u=rw,g=,o=) 以外のパーミッションを持っているか、
そうでなければ /dev/null でなければなりません。
-i <パス名>, --idfile <パス名>
-n, --norewrite
fetchmail
は取得したメール中の RFC-822 のアドレスヘッダ
(To, From, Cc, Bcc, Reply-To) を編集し、
サーバに対してローカルなメールの ID が完全なアドレスに展開されます
(@ とメールサーバのホスト名が追加されます)。
これにより、クライアントにおけるリプライで
宛先を正しくすることが可能になります
(このようにしない場合、メーラはクライアントマシンの
ローカルユーザに送るべきだと考えるかもしれません!)。
このオプションはこの書き換えを無効にします。
(このオプションは、MTA がメールのヘッダを編集することに対して神経質で、
これを止められることを知りたい人々をなだめるために用意しています。
しかし一般的には、実際に書き換えを止めるのは良い考えではありません。)
ETRN や ODMR を使うときには、書き換えオプションは無効です。
-E <envelope 行>, --envelope <envelope 行>
fetchmail
がメールの envelope アドレスのコピーを運ぶと想定するヘッダを変更します。
通常これは `X-Envelope-To' ですが、これは標準ヘッダではないので、
実際には別のものになることがあります。
後述のマルチドロップアドレス処理に関する議論を参照してください。
特殊な場合として、`envelope Received' を設定すると
sendmail 形式の Received 行を処理することが可能になります。
このオプションはデフォルトですが、.fetchmailrc ファイルで
`no envelope' を使って Received の処理を動作全体で無効にしていなければ、
必ずしも必要はないはずです。
-Q <プレフィックス>, --qvirtual <プレフィックス>
fetchmail
を使ってドメイン全体のメールを集めている場合と、
お使いの ISP (またはメール転送プロバイダ) が
qmail を使っている場合に便利です。
qmail の基本機能の 1 つに
--configdump
~/.fetchmailrc
を処理し、指定されたコマンドラインオプションを全て解釈し、
標準出力に設定情報を出力します。
設定情報は Python 言語のデータ構造配置になっています。
このオプションは
fetchmailconf
のような Python で書かれた対話的な
~/.fetchmailrc
エディタと一緒に使うためのものです。
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 コマンドや .fetchmailrc の user オプションを
使って、主に使っている名前とは別のユーザ名を渡すことができます。
お使いの 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 セキュリティリクエストを渡すことができます。
使って行うこともできます。
どちらの場合でも、オプションの値は
inet6_apps ライブラリの net_security_strtorequest() 関数が受け付ける
フォーマットの文字列です。
--ssl オプションを使うと 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 トンネル (下記の例を参照) をお勧めします。
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 は起動時に黙って静かに消えてしまうでしょう。
sendmail
はエラーコード 571 を返します。
この返し値は RFC1893 によって Delivery not authorized, message refused
として与えられています。
RFC821 から置き換えられた現在のドラフトによると、
このような状況で返すべき正しい値は、
550 Requested action not taken: mailbox unavailable
とされています
(このドラフトでは [E.g., mailbox not found, no access, or
command 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 の差戻しメッセージが送られます。
452 (システムのディスクが不十分です)
552 (メッセージが固定の最大メッセージサイズを越えました)
553 (送信ドメインが不正です)
fetchmail
は、エラー出力を行って終了します。
fetchmail
が引き数なしで実行される場合、.fetchmailrc ファイルは実行される
コマンドのリストとして読むことができます。
fetchmail
はこのホストにポーリングを行いません。
(`skip' を使うと、テスト用エントリで安全に実験を行なうことや、
一時的に落ちているホスト用のエントリを簡単に無効にすることができます。)
fetchmail
は DNS の参照を行いません。
ローカル名 (または名前マッピング) が複数ある時には、
fetchmail のコードは取得したメールの
Received, To, Cc, Bcc ヘッダを参照します
(これが「マルチドロップモード (multidrop mode)」です)。
fetchmail は poll 名、`via', `aka', `localdomains' オプションの
いずれかにマッチする、ホスト部分を持つアドレスを探し、
また DNS で調べるとメールサーバのエイリアスであるホスト名部分も通常は探します。
アドレスのマッチングの処理方法の詳しい内容については、
`dns', `checkalias', `localdomains', `aka' の説明を参照してください。
fetchmail がメールサーバのユーザ名にも
ローカルドメインにもマッチさせられない場合には、メールは差し戻されます。
このメールは通常、差出人に戻されますが、
`nobounce' オプションが有効ならば、これは postmaster に送られます
(次に、これはデフォルトで fetchmail を呼び出したユーザになります)。
`dns' オプション (通常は有効) は、マルチドロップメールボックスから取り出した
アドレスをチェックする方法を制御します。
このオプションが有効の時には、DNS を使った参照を行なうことにより、
`aka' または `localdomains' の宣言にマッチしないホストそれぞれのアドレスを
チェックするロジックが有効になります。
メールサーバのユーザ名が、
マッチするホスト名部分に割り当てられていることが認識された時、
そのローカルマッピングがローカルの受信者のリストに追加されます。
`checkalias' オプション (通常は無効) は、
マルチドロップモードの `dns' キーワードが実行した検出結果を拡張し、
エイリアスを使ってポーリングされるものの、
自分自身を識別するにはカノニカルな名前 (canonical name) を用いる
リモートの MTA をうまく扱う方法を提供します。
このようなサーバがポーリングされたときは、
envelope アドレスが展開されたことのチェックは失敗し、
fetchmail
は To/Cc/Bcc ヘッダを使った配送に戻ります
(後述の「ヘッダ対 envelope アドレス」を参照してください)。
このオプションを指定すると、
fetchmail
に対する、
poll 名とリモートの MTA が使う名前の両方に関係する全ての IP アドレスを取得し、
これらの IP アドレスの比較を行うことの指示になります。
これは、リモートサーバのカノニカルな名前が頻繁に変わる状況で役に立ちます。
これを使わなければ、実行制御ファイルを変更する必要があります。
実行制御ファイルで `no dns' が指定された場合は、`checkalias' は無効です。
`aka' オプションはマルチドロップメールボックスと一緒に使うためのものです。
このオプションを使うと、サーバの DNS 的な別名のリストを
予め宣言しておくことができます。
これは、速度と容量のトレードオフを可能にする、最適化のためのハックです。
マルチドロップメールボックスを処理している間に、
fetchmail
がメッセージのヘッダを使ったメールサーバの名前の検索をあきらめた時、
予め宣言してある共通の名前を使うと、DNS を参照するはめにならないで済みます。
`aka' の引き数として与えた名前は、
拡張子としてマッチされる点に注意してください --
例えば `aka netaxs.com' を指定した場合、
単に netaxs.com という名前のホストにはマッチしませんが、
pop3.netaxs.com や mail.netaxs.com といった
`.netaxs.com' で終る任意のホスト名にマッチします。
`localdomains' オプションを使うと、ローカルであると fetchmail が判断する
ドメインのリストを宣言することができます。
fetchmail がマルチドロップモードでアドレス行を展開し、
かつ後に続くホスト名の部分が宣言されたローカルドメインにマッチする時、
そのアドレスは変更されずにリスナまたは MDA に渡されます
(ローカル名マッピングは適用されません)。
`localdomains' を使っている場合には、
`no envelope' も指定する必要があるかもしれません。
このオプションは、fetchmail の通常の、
Received 行や X-Envelope-To ヘッダ、
あるいは以前に `envelope' で設定されたヘッダの
いずれかから envelope アドレスを推定しようとする動作を無効にします。
デフォルトのエントリ中で `no envelope' を設定した場合、
`envelope <string>' を用いて個別エントリ中でこれを取り消すことが可能です。
特別な場合として、`envelope Received' で Received 行の展開の
デフォルトの動作が復元されます。
password オプションは文字列の引き数を必要とします。
この文字列はエントリのサーバで使うパスワードです。
`preconnect' キーワードを使うと、
fetchmail
がメールサーバへの接続を確立する直前に毎回実行する
シェルコマンドを指定することができます。
これは、
ssh (1)
に補助させて安全な POP 接続の設定をしようとする時に役に立つかもしれません。
コマンドがゼロでないステータスを返した場合、
そのメールサーバへのポーリングは異常終了します。
同様に、`postconnect' キーワードを使うと、メールサーバへの接続が切れた
直後に毎回実行するシェルコマンドを指定することができます。
`forcecr' オプションは、LF だけで終わる行を転送の前に
CRLF で終わるようにするかどうかを制御します。
厳密に言うと RFC821 はこれを要求しているのですが、
これを必須としている MTA はほとんどないので、
このオプションは通常は無効になっています
(このような MTA で特に使われているのは qmail だけで、
書き込み時にこれを行います)。
`stripcr' オプションは、取得したメールを転送する前に
キャリッジリターン文字を取り除くかどうかを制御します。
通常はこれをセットする必要はありません。
なぜなら、MDA が宣言されているときには、
これはデフォルトで「オン」(CR 削除が有効) となり、
SMTP 経由で転送されるときには「オフ」(CR 削除が無効) となるからです。
`stripcr' と `forcecr' が両方ともオンならば、`stripcr' が優先されます。
fetchmail
は ESMTP 機能を持つリスナに対して BODY=7BIT を宣言します。
実際には
8-bit ISO や KOI-8 の文字集合を使っているメッセージの場合、
これは問題を起こします。
これらの文字は上位ビットが全て落とされてしまうため、
文字化けしてしまいます。
`pass8bits' がオンであれば、
fetchmail
は ESMTP 機能を持つリスナ全てに対して必ず BODY=8BITMIME を宣言します。
リスナが 8 ビットクリーンであれば (最近のめぼしいものは全部そうです)、
たぶんうまくいくでしょう。
`dropstatus' オプションは、取得したメール中の空でない Status 行と
X-Mozilla-Status 行を残す (デフォルト) か破棄するかを制御します。
これらを残すと、お使いの MUA で (もしあれば)
どのメッセージがサーバ上で既読の印が付けられているかを知ることができます。
一方、この動作は新着メール通知プログラムの一部を混乱させることがあります。
これらのプログラムは、
Status 行が付いているものは全て既読と想定するのです。
(注意: 一部のバグっぽい POP サーバが付ける
空の Status 行は無条件に削除されます。)
`dropdelivered' オプションは、取得したメール中の
Delivered-To ヘッダを残す (デフォルト) か破棄するかを制御します。
このヘッダは、メールサーバ Qmail と Postfix が
ループを防止するために使用していますが、
同じドメイン内でメールサーバを「ミラー」しようとする場合は邪魔になります。
このオプションは、注意して使用して下さい。
`mimedecode' オプションは、quoted-printable エンコーディングを用いている
MIME メッセージを純粋な 8 ビットデータに自動的に変換するかどうかを制御します。
ESMTP 機能を持ち、8 ビットクリーンなリスナ
(これには sendmail などの有名な MTA の大部分が含まれます) に
メールを配送する場合には、
このオプションを使うと quoted-printable で書かれた
メッセージヘッダとデータは自動的に 8 ビットデータに変換され、
メールを読むときに理解しやすくなります。
お使いの電子メールプログラムが MIME メッセージを扱えるならば、
このオプションは必要ありません。
mimedecode オプションはデフォルトで無効になっています。
なぜなら、ヘッダに対して RFC2047 の変換を行うと文字集合の情報が消えてしまい、
ヘッダのエンコーディングが本文のエンコーディングと異なる場合に
好ましくない結果になるからです。
`idle' オプションは IMAP サーバが RFC2177 IDLE コマンド拡張を
サポートしている場合にのみ使用できます。
このオプションが設定されていて、
かつ IDLE コマンドをサポートしていることを fetchmail が検知した場合、
ポーリングの終了毎に IDLE コマンドが発行されます。
このコマンドを使うことで、
IMAP サーバに接続をオープンに保持させ、
新しいメールが来たことをクライアントに通知させます。
頻繁にポーリングを行う必要がある場合、
IDLE コマンドは、TCP/IP 接続とログイン/ログアウトシーケンスをなくすことで、
バンド幅を押えることができます。
一方で、IDLE 接続は fetchmail のほとんどの時間を占めてしまいます。
なぜなら、IDLE コマンドは接続を切らず、
サーバが IDLE をタイムアウトしない限り
別のプールが起こることを許可してしまうためです。
複数のフォルダがある場合も動作せず、
最初のフォルダのみがポーリングされます。
`properties' オプションは拡張のための機構です。
これは文字列の引き数を取りますが、fetchmail 自身はこれを無視します。
この文字列引き数を使って、
設定情報を必要とするスクリプトのための情報を保持することができます。
特に、`--configdump' オプションの出力は、
そのまま Python スクリプトとして利用できる、
ユーザエントリに関連するプロパティとなります。
poll SERVERNAME protocol PROTOCOL username NAME password PASSWORD例:
poll pop.provider.net protocol pop3 username jsmith password secret1省略形を使えるものもあります:
poll pop.provider.net proto pop3 user jsmith password secret1複数のサーバを並べることができます:
poll pop.provider.net proto pop3 user jsmith pass secret1 poll other.provider.net proto pop2 user John.Smith pass My^Hat
poll pop.provider.net proto pop3 user jsmith, with password secret1, is jsmith here; poll other.provider.net proto pop2: user John.Smith, with password My^Hat, is John.Smith here;
poll mail.provider.net with proto pop3: user jsmith there has password u can't krak this is jws here and wants mda /bin/mail
defaults proto pop3 user jsmith poll pop.provider.net pass secret1 poll mail.provider.net user jjsmith there has password secret2
poll pop.provider.net proto pop3 port 3111 user jsmith with pass secret1 is smith here user jones with pass secret2 is jjones here keep
poll pop.provider.net: user maildrop with pass secret1 to golux 'hurkle'='happy' snark here
poll pop.provider.net localdomains loonytoons.org toons.org: user maildrop with pass secret1 to * here
poll mailhost.net with proto imap: plugin ssh %h /usr/sbin/imapd auth ssh; user esr is esr here
fetchmail
が envelope アドレスを推定できることも時々あります。
メールサーバの MTA が
sendmail
であり、メールの受信者が 1 人しかいない場合、MTA は envelope アドレスを
Received ヘッダに与える `by/for' の項を書いているでしょう。
しかし、これは他の MTA でも確実に動作するとは言えませんし、
複数の受信者がいる場合にも動作しません。
デフォルトでは、fetchmail はこれらの行で envelope アドレスを探します。
-E Received または `envelope Received' を指定すると
動作をこのデフォルトに戻すことができます。
これを行う代わりに、一部の SMTP リスナやメールサーバは、
envelope アドレスのコピーを持つヘッダを各メッセージに挿入します。
このヘッダは (存在するならば) `X-Envelope-To' のことがよくあります。
-E オプションまたは `envelope' オプションを用いると、
fetchmail が想定するヘッダを変更することができます。
この種類の envelope ヘッダを書くと、(ブラインドコピーの受信者も含めた)
全ての受信者の名前がメッセージ受信者に明らかになってしまいます。
したがって、これをセキュリティ/プライバシーの問題であると
考えるシステム管理者もいます。
`X-Envelope-To' を少し変えたものが、
qmail がメールのループを避けるために追加する `Delivered-To' ヘッダです。
これは、通常はユーザのドメインに
マッチする文字列の前に、ユーザ名を置いたものであることが多いです。
このプレフィックスを取り除くには、
-Q または `qvirtual' オプションを使います。
残念ながら、これらが両方ともうまく動作しないこともあります。
これらが全て失敗した場合、fetchmail は To/Cc/Bcc ヘッダから出直して、
受信者のアドレスを決めなければなりませんが、これらのヘッダは信頼できません。
特に、メーリングリストのソフトウェアが
リスト全体のアドレスしか To ヘッダに付けないでメールを送ることがよくあります。
fetchmail
がローカルの受信者アドレスを推定できず、
かつ本来の受信者のアドレスが fetchmail を実行したユーザ以外である場合、
メールは無くなってしまうでしょう。
これがマルチドロップ機能を危険にしている要因です。
これに関連する問題は、メールのメッセージをブラインドコピーするとき、
Bcc 情報は envelope アドレスとしてのみ伝えられるということです
(X-Envelope ヘッダがなければ、fetchmail が読めるヘッダには書かれません)。
したがって、メールサーバのホストが常に X-Envelope ヘッダあるいはこれと
同等のヘッダをメールドロップに入れるメッセージに書くようになっていなければ、
fetchmail 経由でメールを取得するユーザ宛のブラインドコピーは失敗します。
fetchmail
を同時に使ってはいけません。
繰り返しますが、メーリングリストからのメールで問題が起こります。
このようなメールには通常、受信者個人のアドレスが書かれていないのです。
fetchmail
が envelope アドレスを推定できなければ、このようなメールは fetchmail
を実行したユーザ (root であることが多いでしょう) にしか届きません。
また、ブラインドコピーの宛先になっているユーザはきっと、
このようなメールが全く読めないでしょう。
もし、
fetchmail
を使って 1 つのメールドロップから POP や IMAP 経由で
複数ユーザ宛のメールを取得しようと考えているならば、考え直してください
(そして、前述のヘッダと envelope アドレスに関する
セクションを読み直してください)。
メールは単にメールサーバのキューに入れておき、
fetchmail の ETRN や ODMR モードを使って定期的に
SMTP での送信を行わせる方が賢いやりかたでしょう
(この場合はもちろん、メールサーバでのメールの有効期限よりも短い間隔で
ポーリングをしなければならないことになります)。
このような設定ができないのならば、UUCP による配送を設定してみてください。
どうしてもこの目的でマルチドロップを使わなければならないのであれば、
fetchmail が参照できる envelope アドレスヘッダを
メールサーバが書き込むように必ずしてください。
さもなくば、メールはきっと無くなってしまい、
あなたを呪うために帰ってくることになるでしょう。
fetchmail
は受信者アドレスを先程説明したように展開し、
それぞれのホスト部分を DNSでチェックし、
これがメールサーバのエイリアスかどうかを調べます。
メールがローカルに配送されます。
これはとても安全ですが、非常に遅い方法です。
これを高速化するためには、
`aka' を使ってメールサーバのエイリアスを予め宣言してください。
これらは DNS の参照を行う前にチェックされます。
aka のリストがメールサーバの DNS エイリアス
(および、これを指す全ての MX 名) を
全て
含んでいることが確かであれば、`no dns' を宣言して DNS 参照を完全に止め、
aka リストに対してのみマッチングを行わせることができます。
fetchmail
をうまく使えるように、与えられた接続の間に起きたことを伝えるための
終了コードが返されるようになっています。
fetchmail
が返す終了コードを以下に示します:
0
1 つ以上のメッセージがうまく取得できた場合
(-c オプションを指定している時は、
取得待ちのメールを見つけ、取得を行わなかった場合)。
1
取得待ちのメールが無かった場合。
(サーバ上に古いメールがまだあるけれど、
取得されるものとして選ばれていなかった場合もあります。)
2
メール取得のためにソケットをオープンしようとしたときにエラーに出会った場合。
ソケットが何かを知らなくても、心配には及びません。
これは単に「どうしようもないエラー」として扱ってください。
このエラーは fetchmail が使おうとしたプロトコルが
/etc/services にリストされていない場合にも起こります。
3
ユーザ認証のステップで失敗した場合。
これは通常、ユーザ ID、パスワード、
APOP ID の指定が間違っていることを意味します。
これ以外の場合では、標準入力が端末に接続されていない状況で
fetchmail を実行しようとしていて、
入力できなかったパスワードを入力するためのプロンプトが
出せないことを意味しています。
4
何らかの種類の致命的なプロトコルエラーが検出された場合。
5
fetchmail
に与えた引き数に文法エラーがある場合。
6
実行制御ファイルのパーミッションが正しくない場合。
7
サーバからエラー状態が報告された場合。
サーバへの接続待ちで
fetchmail
がタイムアウトを起こした時にもこうなります。
8
クライアント側の排他エラーの場合。これは
fetchmail
が既に動作している別の
fetchmail
を検出したか、検出に失敗したため
fetchmail
が動作しているかどうかはっきりしないことを意味します。
9
サーバが応答で lock busy を返したために、
ユーザ認証ステップが失敗した場合。
ちょっと待ってから再挑戦してください!
このエラーはプロトコル全てに実装されているわけではないですし、
サーバ全てに実装されているわけでもありません。
このエラーがサーバに実装されていない場合には、
このコードではなく 2 が返されます (前の項目を参照してください)。
lock busy やこれに似たテキストで lock という語を含むものを応答として返す、
qpopper や他のサーバと通信したときにこのコードが返されることがあります。
10
SMTP ポートのオープンやトランザクションを行おうとしている時に
fetchmail
の動作が失敗した場合。
11
致命的な DNS のエラー。fetchmail が起動時に DNS の参照に失敗し、
その先を実行できなかったときに起こります。
12
BSMTP のバッチファイルをオープンできなかった場合。
13
取得の制限によりポーリングが終了した (--fetchlimit オプションを参照)。
14
サーバがビジーであることを示します。
23
内部エラーの場合。標準エラー出力に出るメッセージを詳しく見てください。
fetchmail
が複数のホストに問い合わせを行う場合、
いずれかの問い合わせでメールをうまく取得できれば、
ステータス 0 が返されます。
そうでないに返されるエラーステータスは、
最後に問い合わせを行ったホストのステータスとなります。
~/.fetchmailrc
~/.fetchids
~/.fetchmail.pid
~/.netrc
/var/run/fetchmail.pid
/etc/fetchmail.pid
fetchmail
デーモンが root 権限で動作している場合には、
SIGHUP によりスリープ状態から覚め、
skip 指定でないサーバ全てに対してポーリングを行います
(これはシステムデーモンの普通の伝統に従うものです)。
デーモンモード
fetchmail
が root 権限以外で動作している場合、
デーモンを起こすには SIGUSR1 を使います
(logout による SIGHUP がデフォルトの動作をそのまま持ち、
fetchmail を kill するかもしれないためです)。
バックグラウンドで
fetchmail
が動作しているときに、フォアグラウンドで
fetchmail
を実行すると、上記のうち適切なデーモンが起こされます。
~/.fetchmailrc
を修正し、文法を間違ってしまうと、
バックグラウンドのプロセスは何も言わずに終了してしまいます。
悪いことに、このプログラムは何かを書き出して終了することができません。
なぜなら、syslog を有効にすべき否かが、まだ分からないからです。
(設定を標準入力から読み込む) -f - オプションは、
プラグインオプションとは互換性がありません。
UIDL コードは一般的にあまり当てにならないもので、
行を飛ばした場合やエラーの場合に、コードの状態を失いやすい傾向があります
(そのため、古いメッセージが再度閲覧されてしまいます)。
このような場合は、IMAP4 に乗り換えて下さい。
`principal' オプションは Kerberos IV しか扱わず、
Kerberos V は扱いません。
コメント、バグ報告、苦情の類は、fetchmail-friends メーリングリスト
<fetchmail-friends@lists.ccil.org> に送ってください。
HTML 版の FAQ が fetchmail のホームページにあります。
http://www.tuxedo.org/~esr/fetchmail へ行くか、
`fetchmail' 関連のページを WWW で検索してください。
SMTP/ESMTP:
mail:
POP2:
POP3:
APOP:
RPOP:
IMAP2/IMAP2BIS:
IMAP4/IMAP4rev1:
ETRN:
ODMR/ATRN:
OTP:
LMTP:
GSSAPI: