読者です 読者をやめる 読者になる 読者になる

しぃぶろぐ。

仕事とか技術関係のこと。

PHPでメール受信処理(PHPプログラムの自動起動)

お久しぶりです。
この一ヶ月の間に第二子出産してましたw
3560gのでっかい男の子ですー。
第一子よりもでっかくて、よく飲んで、よく寝てくれるので、
いやもう楽ちん楽ちん。。。
やっぱり二人目は楽できますねー。
その分、おにーちゃんが物凄く甘えんぼになっているので、
そっちの方が大変です。。。


さて、本題です。


先月までにcakeとPEARを入れておいたので、
早速プログラミングに入りたいと思います。


作りたいのは、(携帯)メールによるお買い物etcメモです。
全体像としては、

  1. メール受信
  2. メールの内容でDB更新
  3. DBの内容でメール送信

になります。
もちろん、メモの閲覧・更新はwebでも行なえるようにしたいと思っています。


今日は一番最初のメールを受信して分解する部分です。
メールの内容をパイプで渡す部分は、
CPA-LABテクニカルさんのさくらインターネットでリアルタイムメール処理
などを参考にしてください。

#/usr/local/bin/php-cgi-default
<?php

#-- PEARの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'] = "\r\n";
$mail_data = Mail_mimeDecode::decode($params);

#-- From
$FromAddress = $mail_data->headers['from'];
$FromAddress = addslashes($FromAddress); //エスケープ処理
$FromAddress = str_replace('"','',$FromAddress);
#-- 署名つきの場合
preg_match("/<.*>/",$FromAddress,$str);
if($str[0]!=""){
	$str=substr($str[0],1,strlen($str[0])-2);
	$FromAddress=$str;
}

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

#-- 本文の取得
switch(strtolower($mail_data->ctype_primary)){
	case "text": //テキストメール
	 $MailBody = $mail_data->body;
	 $MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");
	 break;
	case "multipart": //マルチパート(添付ファイル(画像前提)付)
	 foreach($mail_data->parts as $part){
	 	switch(strtolower($part->ctype_primary)){
			case "text":
			 $MailBody = $part->body;
			 $MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");
			 break;
			case "image":
			 $type = strtolower($part->ctype_secondary);
			 // jpg,gif,png以外の画像形式は受け付けない
			 if($type != "jpeg" and $type != "jpg" and $type != "gif" and $type != "png"){
			 	continue;
			 }
			 // ファイルを保存
			 $fp = fopen("/tmp/". time() . $type, "w");
			 $length = strlen($part->body);
			 fwrite($fp,$part->body,$length);
			 fclose($fp);
			 break;
		}
	 }
	 break;
	default:
	 $MailBody="";
}

あとで、説明追加します。。。