POP サーバにメールを直接書き込む





qpopper や dovecot などの POP サーバでは各ユーザのメールボックスは
1 つのファイルとして管理されている。

例えば、test1 と test2 というユーザが存在する場合、
RedHat や CentOS などの Linux システムのデフォルトでは、
次のようなファイルがメールボックスとなる。

/var/mail/test1
/var/mail/test2

実際に test1 宛にメールが届いている状態で /var/mail/test1 を確認してみる。

今回使用した環境は、OS が CentOS 5 で POP サーバに dovecot を使用している。

# cat /var/mail/test1
From MAILER_DAEMON  Tue Feb 12 06:58:16 2007
Date: Tue, 12 Feb 2007 06:58:16 +0900
From: Mail System Internal Data <MAILER-DAEMON@test.centos>
Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
Message-ID: <1202767096@test.centos>
X-IMAP: 1202761369 0000000020
Status: RO

This text is part of the internal format of your mail folder, and is not
a real message.  It is created automatically by the mail system software.
If deleted, important folder data will be lost, and it will be re-created
with the data reset to initial values.

From test00@test.example  Sat Feb 23 19:53:16 2007
Return-Path: <test00@test.example>
Received: from [1.1.1.3] (test000.test.example [1.1.1.3])
        by test.centos (8.13.8/8.13.8) with ESMTP id m1NArGM7003551
        for <test1@test.centos>; Sat, 23 Feb 2008 19:53:16 +0900
Message-ID: <48055B31.80704@test.example>
Date: Wed, 16 Apr 2008 10:49:37 +0900
From: nadmin <test00@test.example>
User-Agent: Thunderbird 2.0.0.12 (Windows/20080213)
MIME-Version: 1.0
To: test1@test.centos
Subject: test1
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

test


内容を見てみると、黄色色付け部分は dovecot の管理用のフィールド。
それ以降が実際に届いているメールの内容。

管理用のフィールドとは空行で区切られており、
メールのヘッダ情報が続いた後、 再度空行をはさんで本文 「 test 」 があり、
空行で終了。

つまり、「From 送信元  送信日付」で始まるメールの内容を
空行で区切っているだけ。

この性質を理解していれば
POP サーバのメールボックスに直接メールを書き込むことは簡単。

最低限必要な項目のみでメールを書き込むとすると以下のようになる。

From メールの仮の送信元  Sat Feb 10 10:10:10 2007
From: 受信側に見せたい送信元
To: 受信側に見せたい送信先
Subject: 受信側に見せたい件名
空行
本文
空行

「From メールの仮の送信元 Sat Feb 10 10:10:10 2007」 はメールクライアントで
受信した際にどこにも表示されません。

このようにして直接書き込んだメールも
メールクライアントでちゃんと受信することができる。
さらに、受信したらサーバから削除するように設定していれば受信後削除もされる。

これを利用すればシステムログのチェック結果などを本文として
上記の形式でメールボックスに書き込んでおき、
管理者がメールとして受信することができる。
これにより管理者はシステムログのチェック結果を
メールクライアントを利用して管理することができる。

ちなみに、シェルスクリプトではこんな感じ。

#!/bin/sh

echo "From メールの仮の送信元  Sat Feb 10 10:10:10 2007" >> /var/mail/test1
echo "From: 受信側に見せたい送信元" >> /var/mail/test1
echo "To: 受信側に見せたい送信先" >> /var/mail/test1
echo "Subject: 受信側に見せたい件名" >> /var/mail/test1
echo "" >> /var/mail/test1
cat [ ログチェック結果などを記載したファイル ] >> /var/mail/test1
echo "" >> /var/mail/test1

当然ながら、実際にメールをやり取りするわけではないので、
「From:」 や 「To:」 は任意で構わない。

Thunderbird がメール本文を自動修正する