メール受信→PHPで処理

サーバで受け取ったメールをPHPに渡して自動返信する処理が必要になった。

鯖はさくら。

<手順>
1.メール受信したらPHP動かす設定をする
2.PHPでメール処理(今回はPEAR使用)

<ソース>
<?php
/******パス設定******/
$path = '/home/アカウント名/PEAR/';
set_include_path(get_include_path() . PATH_SEPARATOR .
$path);
/******PEAR読み込み******/
require_once("Mail/mimeDecode.php");
/******エンコード設定******/
mb_language('ja');
mb_internal_encoding("utf-8");
/******メール解析******/
$source = file_get_contents("php://stdin");
$decoder = & new Mail_mimeDecode( $source );
$parts = $decoder->getSendArray();
list( $recipients, $headers, $body ) = $parts;
$subject = mb_decode_mimeheader( $headers['Subject'] ) ;
$from = mb_decode_mimeheader( $headers['From'] ) ;
$m_body = trim(mb_convert_encoding( $body, "UTF-8", "JIS" ));
/******デバッグ用に.txtで保存******/
$file = fopen( "mail.txt", "w" );
fputs($file, $m_body);
fclose( $file );
?>



1.の設定は以下のサイト参照。
さくらインターネットのPHPで携帯の空メールシステム(.mailfilter)

このサイトと同じ設定の場合はメールボックスにメールが残らないので以下のように修正した。

<.mailfilterの中身>
cc "| /usr/local/bin/php -q /home/アカウント名/www/スクリプト名"

toをccにしたのと、exitを消しただけ。


2.の、PEAR使った処理は、以下のサイト参照
メール到着で自動的にCGIを実行

しかし何回テスト(適当なアドレスからサーバにメール送信)しても、

Action: failed
Status: 5.0.0
Diagnostic-Code: X-Unix; 255
Last-Attempt-Date: Tue, 9 Nov 2010 02:09:56 +0900 (JST)

というエラーメールが帰ってきて非常に困った。
ググったら以下のサイトを発見し、解決。

PEAR Mail/mimeDecode.php読み込み失敗

結果オーライ。