メール取得 · 1 min read · Sep 08, 2025

Debianでfetchmailを使用してリモートサーバーからメールを取得する

Fetchmailはリモートサーバーからメールを取得するためのプログラムです。5つの異なるサーバーに5つのメールアカウントがあると想像してください。もちろん、各サーバーに接続してメールを取得したくはありません。ここでfetchmailが登場します。Linuxサーバーにユーザーアカウントがあれば、fetchmailを使用してリモートサーバーからメールをダウンロードし、1つのメールボックス(Linuxユーザーのもの)に保存できます。そこから、メールクライアント(例:ThunderbirdやOutlook)でメールを取得できます。

また、スパムやウイルスフィルタリングを行わないプロバイダーでメールアカウントを持っていると想像してください。その場合、fetchmailを使用して自分のサーバーにメールをダウンロードし、スパムやウイルスフィルタ(例:SpamAssassinやClamAV)を通してから、メールクライアントでメールをダウンロードすることができます。

1 前提条件

メールを受信できるシステムユーザーを持つLinuxサーバーが必要です。つまり、PostfixやSendmailなどのMTAがシステムにインストールされている必要があります。そうでないと、fetchmailは機能しません。なぜなら、fetchmailはダウンロードしたメールをMTA(Postfix、Sendmailなど)に渡そうとし、MTAがユーザーのメールボックスにメールを配信するからです(このプロセスにスパムやウイルススキャンを含めるようにシステムを設定することもできますが、amavisd-newやprocmailなどを使用しますが、これはこのチュートリアルではカバーされていません)。

このチュートリアルでは、falkoとtillという2人のユーザーが存在するDebianシステムを使用します。

2 fetchmailのインストール

fetchmailをインストールするには、次のコマンドを実行するだけです。

apt install fetchmail

3 fetchmailの設定

fetchmailを設定する方法は2つあります。グローバル設定ファイルを使用してデーモンとして実行するか、ユーザーごとの設定ファイルとともにfetchmailを実行するcronジョブを作成することができます。ここでは両方の方法を説明します。

3.1 グローバル設定ファイルを使用してfetchmailをデーモンとして実行

fetchmailをデーモンとして実行するには、/etc/default/fetchmailを編集し、START_DAEMONをyesに設定する必要があります。

nano /etc/default/fetchmail
# このファイルはfetchmailのためのいくつかの変数を宣言するために使用されます
#
# ローカライズされたログメッセージを望まない場合は、以下の行のコメントを外してください
# export LC_ALL=C

# fetchmailを開始するかどうかを宣言します。 'yes'または'no'
START_DAEMON=yes

次に、設定ファイル/etc/fetchmailrcを作成する必要があります。このファイルが存在しないとfetchmailデーモンは起動しません。このファイルでは、fetchmailデーモンがどのように動作するか、リモートメールアカウントからメールを取得するためにfetchmailが知っておく必要がある詳細を指定できます。

falkoがメールを取得したい2つのメールアカウントを持っていると仮定しましょう。

  • 最初のアカウント:サーバーpop.someprovider.tld、プロトコルPOP3、ユーザー名 [email protected](はい、この場合ユーザー名はメールアドレスです)、パスワードsecret。
  • 2番目のアカウント:サーバーmail.otherprovider.tld、プロトコルPOP3、ユーザー名ftimme、パスワードverysecurepassword。

tillは1つのメールアカウントを持っています。

  • サーバーmailin.tillsprovider.tld、プロトコルPOP3、ユーザー名tbrehm、パスワードiwonttellyou。

したがって、私たちのファイル/etc/fetchmailrcは次のようになります。

nano /etc/fetchmailrc
# /etc/fetchmailrc システム全体のデーモンモード用
# このファイルはchmod 0600で、所有者はfetchmailでなければなりません

set daemon        300                # 5分ごとにプール
set syslog                        # syslog機能を通じてログ
set postmaster  root

set no bouncemail                # 4xxエラーでの損失を避ける
                                # 一方、5xxエラーはより危険です...

##########################################################################
# プールするホスト
##########################################################################

# デフォルト ===============================================================
# no bouncemailと一緒に使用する方がはるかに安全なので、antispamを-1に設定します
defaults:
timeout 300
antispam -1
batchlimit 100

poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret" is falko here
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall
poll mailin.tillsprovider.tld protocol POP3 user "tbrehm" there with password "iwonttellyou" is till here keep

ファイルの最初には、プログラムの動作を制御するいくつかのグローバルオプションがあります。set daemon 300(これはfetchmailが300秒ごとにメールを取得することを意味します)などです。上記のオプションの意味は次のとおりです。

  • set daemon: バックグラウンドプール間隔を秒単位で設定します。
  • set syslog: syslogを通じてエラーロギングを行います。
  • set postmaster: 最後の手段のメール受信者の名前を指定します(デフォルト:fetchmailを実行しているユーザー、rootユーザーが実行している場合は「postmaster」)。
  • set no bouncemail: エラーメールをローカルのポストマスターに送信します(上記の「postmaster」グローバルオプションに従って)。

次に、サーバーとユーザーオプションがあります。これらはpollで始まる行に組み合わされます。各poll行に共通のオプションがある場合は、defaults:で始まるセクションの前にそれらを指定することもできます(私たちの例ではtimeout、antispam、batchlimitなど)。

  • timeout: サーバーの非アクティビティタイムアウト(デフォルト300)。
  • antispam: SMTPがスパムポリシーブロックとして解釈する戻り値を指定します。
  • batchlimit: 接続が意図的に切断され再構築される前にSMTPリスナーに送信されるメッセージの最大数を指定します(デフォルトは0、制限なしを意味します)。

poll行は自己説明的です。fetchmailはfalkoの外部メールアカウントの両方からメールを取得し、1つのアカウントに保存します。

poll行の最後には異なるエンディングがあることに気付くでしょう(例:nofetchall(デフォルト)、fetchall、keep、nokeep)。それらの意味は次のとおりです。

  • nofetchall: 新しいメッセージのみを取得します(デフォルト)。他に何も指定されていない場合(例:fetchall、keep)、これはnofetchallを意味します。
  • fetchall: 既読か未読かにかかわらず、すべてのメッセージを取得します。
  • keep: サーバーから既読メッセージを削除しません。
  • nokeep: サーバーから既読メッセージを削除します。

利用可能なすべての設定について詳しく知りたい場合は、次を参照してください。

man fetchmail

/etc/fetchmailrcは600の権限を持ち、fetchmailユーザーが所有している必要がありますので、次のようにします。

chmod 600 /etc/fetchmailrc  
chown fetchmail /etc/fetchmailrc

最後に、fetchmailを起動できます。

/etc/init.d/fetchmail start

fetchmailは今、メールをダウンロードし、falkoとtillのメールボックスに保存します(MTAを使用)。これを設定したデーモン秒ごとに繰り返します。

3.2 ユーザーごとの設定ファイルを使用し、cron経由でfetchmailを実行

グローバル設定ファイルを使用する代わりに、ユーザーごとの設定ファイルを使用できます。これらは名前.fetchmailrcで、ユーザーのホームディレクトリに配置する必要があります。

今、ユーザーfalkoのためにそのようなファイルを作成したいと思います。rootではなくfalkoとしてログインしていることを確認してください!次に、次のようにします。

cd ~/  
vi .fetchmailrc
set postmaster falko
set bouncemail

poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret"
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" fetchall

このファイルは、章3.1のファイル/etc/fetchmailrcと非常に似ていますが、is falko hereというフレーズを使用していないことに気付くでしょう(.fetchmailrcはfalkoのホームディレクトリにあるため、fetchmailはメールがfalkoに配信されるべきことを知っています)。もちろん、is falko hereを使用することもできますので、ファイルは次のようにもなります。

set postmaster falko
set bouncemail

poll pop.someprovider.tld protocol POP3 user "[email protected]" there with password "secret" is falko here
poll mail.otherprovider.tld protocol POP3 user "ftimme" there with password "verysecurepassword" is falko here fetchall

利用可能なすべての設定について詳しく知りたい場合は、次を参照してください。

man fetchmail

.fetchmailrcは600の権限を持ち、falkoのみが読み書きできるようにする必要があります。

chmod 600 ~/.fetchmailrc

これで完了です。falkoは次のコマンドを実行して取得プロセスを開始できます。

fetchmail

または

fetchmail -v

これにより、何が起こっているかが表示されます。

もちろん、falkoは数分ごとに手動で取得を開始したくないので、彼のためにcronジョブを作成します。まだfalkoとして、次のコマンドを実行します。

crontab -e

そして次のようなcronジョブを作成します(これは5分ごとにfetchmailを開始します)。

*/5 * * * * /usr/bin/fetchmail &> /dev/null

4 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。