前提
環境:macOS big sur
メールサーバー xサーバー
Xサーバーのメール振り分け機能を利用して、FTPサーバー上のPHPファイルに転送
PHPでメールを解析して本文・件名・添付ファイルのPDFを解析したい
件名や本文、添付ファイル名などは解析できたのですが
PFDの中身を解析することができない。
PHP
1 2header('Content-Type: text/html; charset=UTF-8'); 3 4require_once (dirname(__FILE__).'/../PEAR/Mail/mimeDecode.php'); 5 6// カレントの言語を日本語に設定する 7mb_internal_encoding("UTF-8"); 8mb_language("ja"); 9 10#-- メールデータ取得 11$params['include_bodies'] = true; 12$params['decode_bodies'] = true; 13$params['decode_headers'] = true; 14$params['crlf'] = "\r\n"; 15 16$input = file_get_contents("php://stdin"); // 標準入力 17$decoder = new Mail_mimeDecode($input); 18$mail_data = $decoder->decode($params); 19 20$CHARSET_TO="UTF-8"; 21$charset = $mail_data->ctype_parameters['charset']; 22 23if ( $charset ) { 24 $charset_from = $charset; 25} else { 26 $charset_from = 'auto'; 27} 28 29#-- From フィールドの取得 30$FromAddress = $mail_data->headers['from']; 31 32#-- To フィールドの取得 33$ToAddress = $mail_data->headers['to']; 34 35#-- Subject フィールドの取得 36$Subject = $mail_data->headers['subject']; 37 38$Subject =mb_convert_encoding($Subject,$CHARSET_TO,$charset_from); 39 40#-- 本文の取得 41 42 $attachment = array(); 43 $i = 1; 44 switch(strtolower($mail_data->ctype_primary)){ 45 // シングルパート(本文のみ) 46 case "text": 47 $text = $mail_data->body; 48 break; 49 // マルチパート 50 case "multipart": 51 foreach($mail_data->parts as $part){ 52 $ctype_primary = strtolower($part->ctype_primary); 53 $ctype_secondary = strtolower($part->ctype_secondary); 54 // 本文 55 if($ctype_primary=="text"){ 56 $ctype_primary_array.=$ctype_primary."/"; 57 $text = $part->body; 58 // マルチパート 59 60 }elseif($ctype_primary=="multipart"){ 61 $ctype_primary_array.=$ctype_primary."/"; 62 foreach($part->parts as $part2){ 63 $ctype_primary2 = strtolower($part2->ctype_primary); 64 $ctype_secondary2 = strtolower($part2->ctype_secondary); 65 // 本文 66 if($ctype_primary2=="text"){ 67 $ctype_primary_array.=$ctype_primary2."/"; 68 $text = $part2->body; 69 // 画像またはPDF 70 }elseif($ctype_primary2=="multipart"){ 71 $ctype_primary_array.=$ctype_primary2."/"; 72 }elseif($ctype_primary2=="image" or ($ctype_primary2=="application" and $ctype_secondary2=="pdf")){ 73 $attachment[$i]['mimetype'] = "{$ctype_primary2}/{$ctype_secondary2}"; 74// $attachment[$i]['filename'] = mb_convert_encoding($part2->ctype_parameters['name'],"utf-8",mb_detect_encoding($part->ctype_parameters['name'])); 75 $attachment[$i]['filename'] = $part2->ctype_parameters['name']; 76 $attachment[$i]['binary'] = $part2->body; 77 $i++; 78 } 79 } 80 } 81 } 82 break; 83 default: 84 $text = ""; 85 } 86 $text = mb_convert_encoding($text,"utf-8",mb_detect_encoding($text)); 87 $text = trim($text);
試したこと
multipartの中にmultipartが存在しその中にapplicationがあったのでPDFの名前を抽出できています。
このPDFをpdfparserなどで解析して中身を取得したいのですが、どれを解析すればいいのかわからず質問いたしました。
$attachment[1]['binary']を出力すると下記の文字列だけがでます。
おそらくその後にエンコードされた中身があると思うのですが$attachment[1]['binary']には下記しかありませんでした。
ちなみにPDFには5行くらいの文字列だけです。
%PDF-1.4
%
やりたいこと
PDFには5行くらいのテキストデータが載っているだけです。
これを1行ずつ取得してmysqlに1つのレコードとして保存したい
というのが最終的な目標です。
メールの生データを貼りたいのですが、エンコードされた個人情報なども多く、そのままは貼れないので下記に省略版を貼ります
--Apple-Mail=_7F85D580-FF8E-4BC1-B73C-C423018F038B-XXXXXXXXXXXXXXXX Content-Type: multipart/mixed; boundary="Apple-Mail=_2CE99C86-3103-4EAA-81C7-" --Apple-Mail=_2CE99C86-3103-4EAA-81C7-XXXXXXXXXXXXXXXXXXXX Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 ここにHTMLのメール本文が記載 --Apple-Mail=_2CE99C86-3103-4EAA-81C7-XXXXXXXXXXXXXXXX Content-Disposition: inline; filename*=utf-8''エンコードされたファイル名.pdf Content-Type: application/pdf; x-unix-mode=0644; name="=?utf-8?エンコードされたファイル名?" Content-Transfer-Encoding: base64 ここにPDFと思われる base64でエンコードされた大量の文字列
回答1件
あなたの回答
tips
プレビュー