スマホからのメールを受け取りDBに格納するプログラムです。
テスト環境はiphoneから送信
サーバー:Xサーバー
メール振り分け機能(forwardのようなものだと思います。)で受信したメールを下記PHPに送信しています。
受け取ったメールを分解し、添付画像はフォルダを作成して保存。
テキストや件名などテキストデータはDBに格納
という処理をしていますが、
送信するメールが
例えば本文内で
画像添付 テキスト
という画像がテキストの上で添付の順だと画像もテキストのDB保存もうまく行きます。
しかし
例えば本文内で
テキスト 画像添付
という感じで、テキストの下に画像を添付すると画像は保存されますが、テキストが空でDBに保存されません。
何が原因でしょうか
PHP
<? require_once(dirname(__FILE__).'/../PEAR/Mail/mimeDecode.php'); $year=date('Y'); $month=date('m'); $day=date('d'); $yearfolder = dirname(__FILE__)."/../img/diary/{$year}/"; $monthfolder = dirname(__FILE__)."/../img/diary/{$year}/{$month}/"; $dayfolder = dirname(__FILE__)."/../img/diary/{$year}/{$month}/{$day}/"; //年度フォルダがなければ作成 if(!file_exists($yearfolder)){ mkdir($yearfolder,0777,true);} chmod($yearfolder, 0777); //月度フォルダがなければ作成 if(!file_exists($monthfolder)){ mkdir($monthfolder,0777,true);} chmod($monthfolder, 0777); //今日フォルダがなければ作成 if(!file_exists($dayfolder)){ mkdir($dayfolder,0777,true);} chmod($dayfolder, 0777); mb_language("japanese"); mb_internal_encoding("UTF-8"); $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['input'] = file_get_contents("php://stdin"); // 標準入力 $params['crlf'] = "\r\n"; $structure = Mail_mimeDecode::decode($params); $CHARSET_TO="UTF-8"; $charset = $structure->ctype_parameters['charset']; if ( $charset ) { $charset_from = $charset; } else { $charset_from = 'auto'; } //-------------------------------------------------- //fromを抽出 //-------------------------------------------------- $frommail=$structure->headers['from']; $frommail = addslashes($frommail); $frommail = str_replace('"','',$frommail); //署名付きの場合の処理を追加 preg_match("/<.*>/",$frommail,$str); if($str[0]!=""){ $str=substr($str[0],1,strlen($str[0])-2); $frommail = $str; } //-------------------------------------------------- //toを抽出 //-------------------------------------------------- $mail_to=$structure->headers['to']; $mail_to = addslashes($mail_to); $mail_to = str_replace('"','',$mail_to); //署名付きの場合の処理を追加 preg_match("/<.*>/",$mail_to,$str); if($str[0]!=""){ $str=substr($str[0],1,strlen($str[0])-2); $mail_to = $str; } //-------------------------------------------------- //件名を抽出 //-------------------------------------------------- //絵文字を除去 //$subject=preg_replace('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', '', $structure->headers["subject"]); //$subject = mb_convert_encoding(mb_decode_mimeheader($structure->headers["subject"]),mb_internal_encoding(), "auto"); // 件名を取得 $subject = $structure->headers['subject']; //$subject = mb_convert_encoding($subject,"UTF-8","JIS"); //-------------------------------------------------- //本文を抽出 //-------------------------------------------------- #-- 本文の取得 switch(strtolower($structure->ctype_primary)){ case "text": // シングルパート(テキストのみ) $MailBody = mb_convert_encoding( $structure->body, $CHARSET_TO, $charset_from ); break; case "multipart": // マルチパート(画像付き) foreach($structure->parts as $part){ switch(strtolower($part->ctype_primary)){ case "text": // テキスト $MailBody = mb_convert_encoding( $part->body, $CHARSET_TO, $charset_from ); break; case "image": $filename = $part->d_parameters['filename']; $filetype = $part->ctype_secondary; //フォルダを作成 $diaryfolder = dirname(__FILE__)."/../img/diary/{$year}/{$month}/{$day}/連番/"; if(!file_exists($diaryfolder)){ mkdir($diaryfolder,0777,true);} chmod($diaryfolder, 0777); // 画像ファイル自体はファイル保存。 $image_path = $diaryfolder. $filename; if($fp = fopen($image_path, 'w')){ $length = strlen($part->body); fwrite($fp, $part->body, $length); fclose($fp); chmod($image_path, 0644); } break; } } break; } //以下でメールの件名、送信者、本文などをDBに格納 //省略 ?>
まだ回答がついていません
会員登録して回答してみよう