質問編集履歴

1 一部コード修正

u-sukesan

u-sukesan score 115

2017/06/06 11:11  投稿

phpでメールを受信し分解しDBに格納
メールを受信し
cronにてphpに転送
PHPにて以下の処理をしています。
本文の分解がうまく行かずに苦戦しております。
結果としては目的の文章(氏名)が所得できていません
件名などは取得できています。
メールはmultipartで届いています
どなたか教えていただけると助かります。
**mail.php**
```ここに言語を入力
header('Content-Type: text/html; charset=UTF-8');
require_once(dirname(__FILE__)."/../model/interface_php.php");  
require_once (dirname(__FILE__).'/../PEAR/Mail/mimeDecode.php');
// カレントの言語を日本語に設定する
mb_internal_encoding("UTF-8");
mb_language("ja");
#-- メールデータ取得
$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);
$CHARSET_TO="UTF-8";
$charset = $mail_data->ctype_parameters['charset'];
   if ( $charset ) {
       $charset_from = $charset;
   } else {
       $charset_from = 'auto';
   }
#-- From フィールドの取得
$FromAddress = $mail_data->headers['from'];
#-- To フィールドの取得
$ToAddress = $mail_data->headers['to'];
#-- Subject フィールドの取得
$Subject = $mail_data->headers['subject'];
//$Subject = mb_convert_encoding($Subject,"UTF-8","ASCII,JIS,SJIS-win");
$Subject =mb_convert_encoding($Subject,$CHARSET_TO,$charset_from);
#-- 本文の取得
 switch(strtolower($mail_data->ctype_primary)){
   case "text": // シングルパート(テキストのみ)
           $MailBody = mb_convert_encoding( $mail_data->body, $CHARSET_TO, $charset_from );
     break;
   case "multipart": // マルチパート(画像付き)
     foreach($mail_data->parts as $part){
       switch(strtolower($part->ctype_primary)){
         case "text": // テキスト
           $MailBody = mb_convert_encoding( $part->body, $CHARSET_TO, $charset_from );
           break;
         case "image": // 画像は無視
               
           break;
       }
     }
   break;
   default:
   $MailBody = "";
 }
   
//改行コードを置換してLF改行コードに統一
$str = str_replace(array("\r\n","\r"), "\n", $MailBody);
//LF改行コードで配列に格納
$array = explode("\n", $str);
$array = str_replace(" "," ",$array);
//氏名の位置検索
//名前を取得
if (preg_grep("/氏名/", $array)) {
   $name= preg_grep("/氏名/", $array);
   $n= key($name)+1; //「氏名」の次の行番号
   $name= $array[$n]; //「氏名」の次の行の内容
   $name=str_replace(" ","",$name);
   $name=str_replace(" ","",$name);
   $name=explode("(",$name); //ふりがなと漢字の分解
   $kana=str_replace(")","",$name[1]);
}
//以下DB格納文(省略)
$sql="insert ・・・";
   
```
**メールの本文内容**
```ここに言語を入力
ご利用ありがとうございました。
◇登録内容
■氏名
前田 奈々美(マエダ ナナミ)
以下省略
```
  • PHP

    38120 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    11844 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • cron

    363 questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

  • PEAR

    155 questions

    PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

  • メール

    813 questions

    メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る