メールを受信したらPHPを起動して処理させる方法について少し詳しく
まずやることは2つ
特定のメールアカウントにメールが届いたらPHPを動かす様に設定
→Aliasesに追加
→詳しくは「メール受信後に指定したphpファイルへ渡す方法」を参照ください
PHPに処理を記述する
→ひとまず受けたメールを解析して応答する
メールを解析するにも色々と方法があるようですが、
今回行った解析手順をご説明。
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のサービスは停止されていました。
アンインストールをすることで解消されましたが、理由はわからずです
すこし心残りはありますが、ひとまず目的の動作まではたどり着きました