WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

メールアドレスとスクリプトの連携(空メール処理実装)

      2012/12/08

メールアドレスとスクリプトの連携

携帯電話向けのWebサイトなどでは、空メールを送ると登録の案内が送られてくるような仕組みがよく見受けられます。
ここでは、PostfixとPHPを連携させて、上記の様な”特定のメールアドレスに空メールが送信されると指定されたスクリプトが動作する”機能を実装します。

※Postfix及びPHPのインストールに関しては、本サイトの下記の記事をご参考ください。
Postfix・Dovecotのインストールと基本的な設定
PHPのインストールと基本的な設定

空メール処理スクリプトの実装

ここでは例として下記の様な仕様を持つ空メール処理スクリプトを実装します。

  1. 任意のメールアドレスから”reg@linuxserver.jp”へのメールが届くと、”/home/reg/reg.php”が動作する
  2. 送信元のメールアドレスを解析し、自動的に返信する

なお、メールアドレス”reg@linuxserver.jp”は既に使用できるという前提で進めます。
メールアドレスの生成方法などは下記をご参照ください。

Postfix・Dovecotのインストールと基本的な設定

PEAR::Mail_mimeDecodeのインストール

PEARのメール解析ライブラリである”Mail_mimeDecode”を下記コマンドでインストールします。

[root@centos ~]   pear install Mail_Mime

既に”Mail_Mime”が存在している場合は下記のコマンドでアップグレードします。

[root@centos ~]   pear upgrade Mail_Mime

インストール(※若しくはアップグレード)が正常に完了したか下記のコマンドで確認します。

[root@centos ~]   pear list | grep 'Mail_'
~ 下記のように"Mail_mimeDecode"が表示されればOK ~
Mail_Mime         1.5.2   stable
Mail_mimeDecode   1.5.0   stable

Postfixのエイリアスを設定

Postfixのalias(エイリアス)を使い、メールアドレス”reg@linuxserver.jp”宛のメールをPHPに引き渡すように設定します。
下記コマンドで、エイリアス設定ファイル”/etc/aliases”の末尾に設定を追記します。

[root@centos ~]   echo 'reg: "|/usr/bin/php /home/reg/reg.php"' >> /etc/aliases

上記設定を反映するため、下記コマンドを実行します。

[root@centos ~]   postalias /etc/aliases

空メール処理スクリプトの生成

設定したスクリプトのパス(※ここでは/home/reg/reg.php)に下記のソースでスクリプトを作成します。

reg.php
/**
 * 空メール処理スクリプト
*/

/*
 * PEARライブラリの読み込み
 */
require_once('Mail/mimeDecode.php');

/*
 * 受信メールの解析
 */
// メールの読み込み
$source = file_get_contents("php://stdin");
if(!$source) {
    exit;    // 読み込みが失敗した場合終了
}

// 送信元メールアドレス取得
$decoder = new Mail_mimeDecode($source);
$structure = $decoder->decode($params);
$from = $structure->headers['from'];
$from = mb_decode_mimeheader($from);
$from = mb_convert_encoding($from, mb_internal_encoding(), 'auto');
if (preg_match('/<(.*)>$/', $from, $matches)) {
    $from = $matches[1];
}
if(!$from) {
    exit;    // 送信元が取得できなかった場合は終了
}

/*
 * メールの自動返信
 */
$to = $from;
$subject = "空メール自動返信の件名";
$body = "空メール自動返信の本文";

mb_internal_encoding("SJIS");
mb_language("japanese");
mb_send_mail($from, $subject, $body, 'reg@linuxserver.jp');

スクリプトの設置が完了したら実際に空メールを送信して動作確認を行います。

 - メールサーバ構築 , ,