メール取得 · 1 min read · Jan 01, 2026

getmailを使用してリモートサーバーからメールを取得する (Debian Etch)

getmailを使用してリモートサーバーからメールを取得する (Debian Etch)

バージョン 1.1
著者: Falko Timme

Getmailはリモートサーバーからメールを取得するためのプログラムで、fetchmailに非常に似ていますが、より柔軟です。たとえば、PostfixのようなMTAを必要とせずに、Maildirまたはmboxメールボックスに直接メールを配信するように設定できますが、もちろん、希望する場合はMTAを介してメールをパイプすることもできます。Getmailは、SpamAssassinやClamAVなどのフィルターを使用してメールをスキャンでき、特定の日数が経過した後にのみ元のサーバー上のメールを削除するようにgetmailに指示することもできます。

私はこれがあなたにとって機能するという保証はしません!

1 前提条件

私は、ローカルユーザーfalkoがローカルメールアドレス[email protected]を持つDebian Etchシステムでgetmailをテストしました。

2 getmailのインストール

getmailをインストールするには、rootとして次のコマンドを実行するだけです。

apt-get install getmail4

3 getmailの設定

Getmailはユーザーごとの設定ファイルを介して構成でき、そのユーザーによって実行されます。getmailを自動的に実行するようにするには、そのユーザーのためにcronジョブを作成できます。

この章では、あなたがrootではなくユーザーfalkoとしてログインしていると仮定しています!

Getmailは設定ファイル~/.getmail/getmailrcを探しているので、まずは0700の権限で~/.getmailディレクトリを作成する必要があります。

mkdir -m 0700 ~/.getmail

次に、~/.getmail/getmailrc設定ファイルを作成します。getmailrcファイルには、少なくとも1つの[retriever]セクションと1つの[destination]セクションが必要です。

vi ~/.getmail/getmailrc

| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = Maildir path = ~/Maildir/ |

上記の例では、falkoがpop.someprovider.tldサーバーでユーザー名[email protected]とパスワードsecretを持つメールアカウントを持ち、~/Maildir/が彼のMaildirディレクトリであると仮定しています。

これでgetmailの設定は十分です。falkoは次のコマンドを実行することでリモートサーバーからメールを取得できます。

getmail

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

crontab -e

そして、次のようなcronジョブを作成します(これにより、5分ごとにgetmailが開始されます):

| */5 * * * * /usr/bin/getmail &> /dev/null |

次に、falkoがこのサーバーにMaildirアカウントを持っていないが、mboxアカウントを持っていると仮定しましょう(/var/mail/falko)。私たちがする必要があるのは、~/.getmail/getmailrcの[destination]セクションを次のように変更することだけです。

vi ~/.getmail/getmailrc

| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = Mboxrd path = /var/mail/falko |

次の例では、リモートサーバーから取得したメールをPostfixのようなMTAを介してパイプしたいと考えています(Postfixがすでにインストールされていて動作していると仮定します)。Postfixは、メールをMaildirまたはmboxに配信する必要があるかどうかを処理し、amavisd-newを介してスパムやウイルススキャナーを呼び出すこともできます。

vi ~/.getmail/getmailrc

| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = MDA_external path = /usr/sbin/sendmail arguments = ("-i", "-bm", "[email protected]") unixfrom = true |

(ご覧のとおり、falkoのローカルメールアドレスは[email protected]であることをgetmailに指示しています。)

引数行の-iスイッチは重要です(Chris Moulesに感謝します):

*問題は、送信先に送信されるメールの中には、送信先に送信されると切り捨てられるものがあることです。これは、ソースから引き出されたメッセージの本文に単一のドット(.)を含む行がある場合に発生する可能性があります。SMTPでは、これはメッセージの終わりを示すために使用されます。コマンドラインでsendmailを呼び出すと、デフォルトでは、メッセージはEOFまたは単一のドットで終了します。

Postfix sendmailマニュアルページの引用:

デフォルトでは、Postfix sendmail(1)は、EOFまでまたは単一のドット文字を含む行を読み取るまで、標準入力からメッセージを読み取り、配信の手配を行います。

sendmailマニュアルページの引用:

フラグなしで、sendmailは標準入力を終了までまたは単一のドットのみで構成される行まで読み取り、そこで見つかったメッセージのコピーをリストされたすべてのアドレスに送信します。

私は、クライアントから時折、彼らのメールが「破損」したり、「欠落」したり、「切り捨てられたり」するという通知を受け取っていました。私たちのサーバー上のメッセージと彼らのメールシステム上のメッセージを見た後、問題があることは明らかでした。

少し調査したところ、ローカルsendmailを’-i’オプションで呼び出す必要があることがわかりました:
Postfix sendmailマニュアルページの引用:


-i 標準入力からメッセージを読み取るとき、単一のドット文字を入力の終わりとして扱わない。

これにより、sendmailはメッセージが送信されるまでファイルの終わりまで待機します。*

-iスイッチを次のようなメールでテストできます:

---
Four:
....
Three:
...
Two:
..
One:
.
---

3.1 オプション

~/.getmail/getmailrcに[options]セクションを追加して、getmailのデフォルトの動作を変更することもできます。たとえば、次のようにします。

vi ~/.getmail/getmailrc

| [...] [options] verbose = 1 read_all = false delete = true message_log_syslog = true |

上記のオプションは、getmailに取得したメッセージに関するメッセージを印刷し、新しいメッセージのみを取得し、取得後にリモートサーバーからメッセージを削除し、syslogにログを記録するように指示します。

10日以上前のメールのみを削除したい場合は、[options]セクションを次のように変更できます。

vi ~/.getmail/getmailrc

| [...] [options] verbose = 1 read_all = false delete_after = 10 message_log_syslog = true |

すべての利用可能なオプションの詳細については、http://pyropus.ca/software/getmail/configuration.html#conf-optionsをご覧ください。

Share: X/Twitter LinkedIn

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

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