空メール送信で PHP を動作させて自動返送させる .forward の設定方法


[初回公開] 2010年04月28日

会員登録などで件名や本文に何も入力せずにメール送信(空メール送信)してプログラムが自動で返送する仕組みを構築したい場合は、メールサーバの .forward の設定で行うことができ、いくつかの方法の中からメールを受信するとプログラム言語の PHP が動作する方法を紹介する。

空メール送信で PHP を動作させて自動返送させる .forward の設定方法

1.空メール送信とは

空メール送信とは、電子メールを送信する際に件名(メールタイトル)と本文を未入力のまま指定したメールアドレスにメール送信することである。
受信側はメールを受け取ることはできるものの、メールを開封すると本文が無く、件名が「件名なし」といった内容で表示され、中身が全くなく空であることから「空メール」と呼ばれることが多い。



2.空メール送信を用いるメリット

空メール送信を用いるメリットとしては、空メールを受け取った側は送信者のメールアドレスをほぼ確実に入手できることである。
最近では会員登録の歳にメールアドレスが必要になることが多いが、登録者にメールアドレスを入力させると入力間違いで正確なアドレスが入手できない場合があるが、空メールを使うと差出人の情報から送信者のメールアドレスが取得可能となる。

また、一昔前のフィーチャーフォン(ガラケ)が一般的に利用されている頃は、メールアドレスの入力が手間だったため、その手間を軽減させるために空メールを用いられることが多かった。

ただし、メーラーによっては差出人(From 情報)を偽装することが可能なため、必ずしも正確なメールアドレスが取得できるとは限らない。

3.メールを受信してプログラムを動作させる仕組み

メールを受信して差出人のメールアドレス(From 情報)を自動的に取得するためには、メール受信と同時にプログラムを動作させる必要がある。
その仕組みが下図のようになっており、通常の電子メールはメールサーバで受信すると、該当するアドレスのメールボックスにメールが格納される。

メールを受信してプログラムを動作させる仕組み


そこで、メールサーバの転送や振り分けを行う設定ファイルでメールボックスではなく、プログラムファイルを呼び出すようにすることで差出人の情報を抽出して、自動的に返送するといったことが可能になる。

メールサーバの Postfix では .forward を編集することで受信したメールをメールボックスからプログラムに渡すことができる。

4..forward で PHP を動作させる方法

.forward で PHP を動作させる方法は、.forward ファイルを用意してプログラムがあるパスを記述するだけでよい。
今回はメールサーバ内にメールが受信できるアカウントを用意し、そのアカウントごとに .forward を用意する方法である。

4-1.メールアカウントを作成する

電子メールを受信するためにまずメールサーバにアカウントを作成する。
CentOS や RedHat など Linux 系のサーバであれば次のコマンドでアカウントが作成される。

# useradd -s /sbin/nologin {アカウント名}

上記で useradd はアカウントを作成するコマンドで、/sbin/nologin でサーバにログインさせないことを指定するオプションとなっている。
サーバへのログインができないため、ハッキングなどサーバへの攻撃を防ぐ効果がある。

4-2..forward ファイルを作成する

メールアカウントを作成すると電子メールを受け取るとメールボックスにメールが入るようになるので、メールボックスに入れずにプログラムが動作するように .forward ファイルを作成する。

# touch /home/{アカウント名}/.forward
# chown {アカウント名}:{アカウント名} /home/{アカウント名}/.forward


touch はファイルを作成するコマンドで、作成したアカウントに対して .forward ファイルを作成している。
次に、chown コマンドで作成したアカウントの権限で .forward が読み込めるように設定変更を行っている。
Linux 系のサーバはファイルごとに権限があり、操作権限がないとファイルの実行どころから内容を参照することもできない仕組みになっているためである。

4-3..forward にプログラムへの転送を記述する

最後に作成した .forward ファイルにプログラムへの転送を下記のように記述する。

# vi /home/アカウント名/.forward
 ↓ 下記を記載
"|exec /usr/local/bin/php /{プログラムがあるパス}/{プログラム名}.php"

vi コマンドはテキストファイルを編集するコマンドで、”” を含む一文を .forward に記述して保存するとメール受信時に指定したプログラムが実行されるようになる。

尚、今回は利用するプログラムが PHP を想定しているため、転送先のプログラムのファイル拡張子が .php になっているが、Python など他の言語であれば拡張子が異なるので随時変更する。

また、「exec /usr/local/bin/php」で PHP ファイルを実行することを差している。
php を動作させるパスもサーバによって異なるため PHP をインストールした状況に応じて変更する。

5.メールを受信してプログラムを動作させた応用

メールを受信してプログラムを動作せるメリットはメールアドレスの取得といった点を前述したが、プログラムが動作することでさまざまなことに応用が可能になる。

例えばウェブサイトやブログの更新において、メール本文に記事となる文章を記載してメールを送ると、自動的に記事が公開させることができる。

また、Raspberry Pi(ラズベリーパイ)などセンサーや家電と接続可能な IoT 機器の中には Linux 系の OS が搭載されていることがあり、メールを受信するとセンサーでデータを収集したり、家電を遠隔で操作することも可能になる。

関連記事

コメントを残す