fetchmailの設定

メールの管理がめんどくさくなってきたので自宅サーバで一元管理することにしました。現在、会社のメール2ドメインとISPのメール1ドメインと自宅サーバのメール1ドメンイの計4ドメインを使っています。この4ドメインを自宅サーバで一元管理する事にしました。fetchmailとprocmailを使用して、自宅メールサーバに各メールが集まるようにしました。

しくみとしては、こんな感じです。

  1. fetchmailが、各ドメインのPOP3サーバへメールを取りにいく。
  2. fetchmailから、exim4へメールを渡し各ユーザへ配信する。
  3. メールが配信されると、procmailが起動する。
  4. procmailは、ルールどおりにメールを振分け各ディレクトリに保存する。

exim4とdovecot設定は、できているのでfetchmailとprocmailの設定を行いました。

fetchmailインストールについて

インストールは、いつも通り「aptitude」で行います。

aptitude install fetchmail

設定ファイルの作成

基本的に、各ユーザ単位で自分のメールを取得する方針なので、各個人ごとに「$HOME/.fetchmailrc」を作成します。設定ファイルには、パスワードが含まれますのでパーミッション「600」に設定します。
設定例は、以下の通り。

set no bouncemail        (送信者にエラーメッセージを送らない。)

defaults
    uidl                 (重複したメールを読み取らない。)

    no mimedecode        (MIME 形式のメッセージに変換しない。)
    keep

poll pop.xxxxxxx.ne.jp   (pop、imapメールサーバーを設定。)
    protocol pop3        (pop3、imapを設定。)
    user AAAAA           (アクセスに必要なユーザIDを設定。)
    password BBBBB       (アクセスに必要なパスワードを設定。)
    smtphost localhost   (転送先のホストを設定。)
    is CCCCC here        (配信するユーザ名を設定。hereがある場合はローカルユーザ。)

実行スケジュールの登録

スケジュール実行するために各ユーザごとにcronに登録します。

crontab -u AAAAA -e   (AAAAAはユーザ)
*/3 * * * * /usr/bin/fetchmail > /dev/null

これで3分おきにメールを取りに行きます。以上で終了です。非常に簡単でしたが、ここで、はまったことがありました。

何度も同じメールを取得する

fetchmail起動後のメール数をみてびっくり。未読メールが600件以上になっていました。しかも、同じメールが複数存在し、増え続けていました。ネット上を調査し、設定ファイルにuidlオプションを設定すればよいことが判明。

変な日本語のエラー

上記オプションを追加したところ、変な日本語のエラーが出ました。

fetchmail:/home/AAAAA /.fetchmailrc:7: アカウント サーバオプションはユーザオプションの後で設定します。 , サーバ uidl

意味不明です。LANG=Cで再実行。

fetchmail:/home/AAAAA /.fetchmailrc:7: server option after user options at uidl

やっと意味がわかりました。サーバオプションがユーザオプションの後に記述されているため、順番が違うというエラーのようです。fetchmailのオプションは、大きく3種類あり記述の順序を次の通り。

  1. グローバルオプション
  2. サーバオプション
  3. ユーザオプション

具体的には、defaultsの項目で設定しているオプションの記述を

defaults
    no mimedecode
    keep
    uidl

としていたことが原因でした。uidlを先頭に記述することにより直りました。

fetchmailの設定項目一覧

グローバル・オプション

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

サーバ・オプション

オプション 説明
via メール・サーバの DNS 名を指定します。これは poll 名を上書きします。
proto[col] (-p) プロトコルを指定します(大文字・小文字は関係ありません)。 POP2, POP3, IMAP, IMAP-K4, IMAP-GSS, APOP, KPOP などが指定できます。
port (-P) TCP/IP のサービス・ポートを指定します。
auth[enticate] (-A) 予備認証のタイプを設定します。 (デフォルト値は 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 (-U) POP3 で必ずクライアント側で UIDL を使うようにします。
no uidl POP3 での UIDL の使用を止めます。(デフォルト)

ユーザ・オプション

オプション 説明
user[name] (-u) リモートのユーザ名を設定します。 (name の後に here があると、ローカルのユーザ名です)
is ローカルのユーザ名とリモートのユーザ名を接続します。
to ローカルのユーザ名とリモートのユーザ名を接続します。
pass[word] リモート・アカウントのパスワードを指定します。
folder (-r) 問い合わせをするリモートのフォルダを指定します。
smtphost (-S) 転送先の SMTP ホスト(群)を指定します。
smtpaddress (-D) RCPT TO 行に書くドメインを指定します。
antispam (-Z) スパム防御と解釈される SMTP の返し値を指定します。
mda (-m) ローカルの配送に使う MDA を指定します。
bsmtp (-o) 追加する BSMTP バッチファイルを指定します。
preconnect それぞれの接続の前に実行するコマンド。
postconnect それぞれの接続の後に実行するコマンド。
keep (-k) 既読のメッセージをサーバから削除しません。
flush (-F) 問い合わせの前に既読のメッセージを全てフラッシュします。
fetchall (-a) 既読・未読にかかわらず全てのメッセージを取得します。
rewrite リプライのために目的アドレスを書き換えます。(デフォルト)
stripcr 行末からキャリッジ・リターン文字を取り除きます。
forcecr 行末にキャリッジ・リターン文字を強制します。
pass8bits ESMTP リスナーに対し、BODY=8BITMIME を強制します。
dropstatus やってくるメールから Status 行と X-Mozilla-Status 行を取り除きます。
mimedecode quoted-printable を 8ビットの MIME 形式のメッセージに変換します。(デフォルト)
no keep (-K) 既読のメッセージをサーバから削除します。(デフォルト)
no flush 問い合わせの前に既読メッセージ全てはフラッシュしません。(デフォルト)
no fetchall 新規メッセージだけを取得します。(デフォルト)
no rewrite ヘッダーを書き換えません。
no stripcr キャリッジリターン文字を取り除きません。(デフォルト)
no forcecr 行末にはキャリッジリターン文字を強制しません。(デフォルト)
no pass8bits ESMTP リスナに BODY=8BITMIME を強制しません。(デフォルト)
no dropstatus Status ヘッダを捨てません。(デフォルト)
no mimedecode quoted-printable を 8 ビット MIME 形式のメッセージには変換しません。
limit (-l) メッセージのサイズの上限を設定します。
warnings (-w) メッセージサイズに関する警告の時間間隔を設定します。
batchlimit (-b) 1 回の接続で転送するする最大メッセージ数。
fetchlimit (-B) 1 回の接続で取得する最大メッセージ数。
expunge (-e) 何回目のメッセージごとに削除を実行するかを指定します。(IMAP 専用)
properties fetchmail が無視する文字列値。(拡張スクリプトで使うことができます)
スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする