メールを受信したらPHPを起動して処理させる方法について少し詳しくひらめき電球


まずやることは2つ

1特定のメールアカウントにメールが届いたらPHPを動かす様に設定

  →Aliasesに追加

  →詳しくは「メール受信後に指定したphpファイルへ渡す方法」を参照くださいビックリマーク


2PHPに処理を記述する

  →ひとまず受けたメールを解析して応答する


メールを解析するにも色々と方法があるようですが、

今回行った解析手順をご説明。


PHPの場合、PEARのMail_Mimeというパッケージを使用すると

メール解析が簡単になりますビックリマーク(もっと簡単な方法はあるかもしれませんがあせる


ではまずPEARのインストール

 [root@linux root]# yum -y install php-pear


そして最新版にします

 [root@linux root]# pear upgrade-all


※上記の作業でもし「WARNING: channel "pear.php.net" has updated its protocols,

   use "channel-update pear.php.net" to update」とでたら下記を実行します

 [root@linux root]# pear channel-update pear.php.net


次にメール解析mimeDecode.phpのインストール

 [root@linux root]# pear install –f Mail_mime


以上でインストール作業は終了ですチョキ



ここからはPHPの内容についてですひらめき電球

ただし文字化けしないようにする為にはマルチバイト文字列関数(mbstring)のインストールが必要となります。

 [root@linux root]# yum install php-mbstring


実際のPHPの内容は以下のようにしました。


<?php
//PEARのライブラリ読み込み
require_once("/usr/share/pear/Mail/mimeDecode.php");
mb_internal_encoding("UTF-8");
mb_language("japanese");

//メールソースを標準入力から読み込み
$source = file_get_contents("php://stdin");
if(!$source) {
exit(); // 読み込み失敗
}

//メール解析
$params['include_bodies'] = true;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$decoder = new Mail_mimeDecode($source);
$structure = $decoder->decode($params);
$from = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), mb_internal_encoding(), "auto");
$mailadr = mb_convert_encoding(mb_decode_mimeheader($structure->headers['to']), mb_internal_encoding(), "auto");

//メール返信
$to = $from;
$title = "返信";

mb_internal_encoding("UTF-8");
mb_language("japanese");
mb_send_mail($to, $title, $body , $from);

?>


これでメールを受けてこのPHPを動かす設定になっていれば返信されるはずです得意げ


はまりポイントえっ

postfixとdovecotを使用していたのですが、sendmailのアンインストールをしていなかった為に

返信できる時と出来ない時が発生しました。

具体的には

docomoの携帯には返信されるけど、softbankの携帯には返信されないという現象汗


ちなみにsendmailのサービスは停止されていました。

アンインストールをすることで解消されましたが、理由はわからずですあせる


すこし心残りはありますが、ひとまず目的の動作まではたどり着きましたグッド!