メールでPHPを起動する方法

メールを受信してプログラム(PHP)を起動させる方法を調べてたのでちょっとメモ。

sendmail-cfのインストール

yum -y install sendmail-cf

sendmail.mcの編集

/etc/mail/sendmail.mcを編集して以下の行をコメントアウト。
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
   ↓
dnl #DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')

sendmail.cfを再構築

以下のコマンドで。
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

ドメインをlocal-host-namesに追加

/etc/mail/local-host-namesを編集して自分のドメインを追加します。
# local-host-names - include all aliases for your machine here.
domain.com ← ここにドメインを追加

firewallの25番ポートをあける

以下のコマンドでfirewallの設定を確認します。
# /sbin/iptables -L
これでsmtpが設定されていなければ空けます。
ポートの空け方はココを参考に。
さくらVPSにiptablesを設定した (2010.09.25)

PEARのMail_Mimeをインストール

以下のコマンドでMail_Mimeが入っているか確認します。
# pear list
で、Mail_Mimeが入ってなかったらインストールします。
# pear install Mail_Mime

プログラムを書く

とりあえず受信したメールを処理してるところだけ。
require_once 'Mail/mimeDecode.php';

#-- メールデータ取得
$params['include_bodies'] = true; 
$params['decode_bodies'] = true; 
$params['decode_headers'] = true; 
$params['input'] = file_get_contents("php://stdin");
$params['crlf'] = "rn"; 
$mail_data = Mail_mimeDecode::decode($params);

#-- From フィールドの取得
$FromAddress = $mail_data->headers['from'];

#-- To フィールドの取得
$ToAddress = $mail_data->headers['to'];

#-- Subject フィールドの取得
$Subject = $mail_data->headers['subject'];
$Subject = mb_convert_encoding($Subject,"UTF-8","JIS");

#-- 本文の取得
$MailBody = $mail_data->body;
$MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");
プログラムについてはこのあと内容によって処理を追加したりとかしてください。

aliasesを編集

/etc/aliasesを編集して特定のアドレスにメールが届いたときにプログラムを呼び出すように記述します。
aliases: "|php /dir/program.php"
aliasesの部分がメールアドレスの@の前の部分で、"|"の後ろに実行したいコマンドを記載します。
ここで指定したアドレスにメールが届くと、後半のコマンドが実行されます。


以下、参考にさせていただいたサイトです。
どうもありがとうございます。

あ、DNSのMXレコードの設定についてもわすれずに。