こちらのサイトを参考に、メールを解析していますが、添付ファイルにbatファイル・vbsファイル・iniファイル等、メモ帳で編集できるファイルを添付すると、添付ファイルの内容が本文に入ってしまい。肝心の本文がなくなってしまいます。
使用しているPHPスクリプト
#!/usr/bin/php <?php $stdin = fopen("php://stdin", "r"); $header = ""; $_header_write = true; $raw_mail = ""; $ketasuu = array(); do { $line = fread($stdin, 4096); if (strlen($line) == 0) break; if ( $n = strpos($line, "\n\n")){ //空行を見つけた $header .= substr($line, 0, $n); $_header_write = false; } if ($_header_write) $header .= $line; $raw_mail .= $line ;//. PHP_EOL; } while(true); fclose($stdin); require_once('/usr/local/bin/ReceiptMailDecoder.class.php'); $decoder =& new ReceiptMailDecoder($raw_mail); //X-Original-Toを取得する $deliveredto = $decoder->getDeliveredTo( 'x-original-to' ); //$deliveredtoからアカウントを取得 $deliveredaccount = strstr($deliveredto, "@", true); //$deliveredtoからドメインを取得 $mydomain = strstr($deliveredto,"@"); $mydomain = str_replace('@', "", $mydomain); //fromを取り出す $subfrom = $decoder->getFromAddr('from'); $fromtxt = $subfrom; //件名を取得する $subject = $decoder->getDecodedHeader( 'subject' ); $subject = mb_convert_encoding($subject,"UTF-8",mb_detect_encoding($subject, "ASCII,JIS,UTF-8,CP51932,SJIS-win,iso-2022-jp", true)); $body = ""; //本文を取得する //text/planなメール本文を取得する $body = mb_convert_encoding($decoder->body['text'],'UTF-8','auto'); if (empty($body)){ //text/htmlなメール本文を取得する $body = mb_convert_encoding($decoder->body['html'],'UTF-8','auto'); $body = mb_convert_encoding($body,'UTF-8',mb_detect_encoding($body, 'ASCII,JIS,UTF-8,CP51932,SJIS-win,iso-2022-jp','auto')); }; //マルチパートのデータを取得する if ( $decoder->isMultipart() ) { $tempFiles = array(); $num_of_attaches = $decoder->getNumOfAttach(); for ( $i=0 ; $i < $num_of_attaches ; ++$i ) { /* * ファイルを一時ディレクトリ _TEMP_ATTACH_FILE_DIR_ に保存する * 一時ファイルには tempnam()を使用する */ $fpath = tempnam( _TEMP_ATTACH_FILE_DIR_, "todoattach_" ); print "fpath=$fpath <br>\n"; if ( $decoder->saveAttachFile( $i, $fpath )) { $tempFiles["$fpath"] = $decoder->attachments[$i]['mime_type']; //取り込んだ添付ファイルの名前を取得 foreach (glob($fpath."*") as $filename) { if (filesize($filename) >0){ //指定した文字数以降の文字列を取得 $cpname = $deliveredaccount."_".substr($filename, strlen($fpath)); $cpname = mb_convert_encoding($cpname,'UTF-8',mb_detect_encoding($cpname, 'ASCII,JIS,UTF-8,CP51932,SJIS-win,iso-2022-jp','auto')); //サイズが0(ゼロ)より大きいとき if ($tmpchk == "") { $tmpchk = $cpname; } else { $tmpchk .= ', '.$cpname; }; $cpname = "/home/userdir/".$cpname; //ファイルをコピーする var_dump(copy( $filename, $cpname )); //ファイルを削除する var_dump( unlink($filename) ); var_dump( unlink($fpath) ); }; }; }; }; }; //bodyからhtmlタグを取り除く(改行のみ残す) $honbun = strip_tags($body,'<br>'); $osirase = "*******************************************************\n"; $osirase .= " お知らせ\n"; $osirase .= " ".$subfrom."\n"; if (empty($tmpchk)) { $osirase .= "\n"; } else { $osirase .= " 添付ファイル:".$tmpchk."\n"; }; $osirase .= "*******************************************************\n\n"; $subto='<'.$deliveredaccount.'@xxxxxxx.com>'; //言語設定、内部エンコーディングを指定する mb_language("japanese"); mb_internal_encoding("UTF-8"); //日本語メール送信 $atesaki = $subto; $kenmei = $subject; $naiyou = $osirase.$honbun; $from = $fromtxt; //送信 echo mb_send_mail($atesaki,$kenmei,$naiyou,'From:'.$from); ?>
エクセルファイルを添付したとき
******************************************************* お知らせ user-a@xxxx.com様からのメールです。 添付ファイル:検索項目.xlsx ******************************************************* テストメール
batファイルを添付したとき
******************************************************* お知らせ user-a@xxxx.com様からのメールです。 ******************************************************* pause pause cd c:\aaa move /y c:\aaa\cartier4.htm c:\bbb move /y c:\aaa\omega4.htm c:\bbb move /y c:\aaa\corum4.htm c:\bbb move /y c:\aaa\tudor4.htm c:\bbb move /y c:\aaa\bleitling4.htm c:\bbb pause
上記メールの本体です
Return-Path: <user_1@exempl_1.com> X-Original-To: user_2@exempl_2.com Delivered-To: user_2@exempl_2.com Received: from exempl_3.com (mailsv03.exempl_3.com [10.130.201.17]) by exempl_2.com (Postfix) with ESMTP id 9A17055C20 for <user_2@exempl_2.com>; Wed, 12 Apr 2017 01:20:02 +0900 (JST) Received: from exempl_3.com (localhost [127.0.0.1]) by exempl_3.com (Proxmox) with ESMTP id D64BC10FC520 for <user_2@exempl_2.com>; Wed, 12 Apr 2017 01:20:12 +0900 (JST) Received: from outd2.commnd.jp (outd2.commnd.jp [219.117.35.72]) by exempl_3.com (Proxmox) with ESMTP id 5921D10FCE54 for <user_2@exempl_2.com>; Wed, 12 Apr 2017 01:20:05 +0900 (JST) Received: from TEVAAV12.commnd.jp (TEVAAV12.sv.commnd.jp [192.168.41.152]) by TEVAOUTD02.sv.commnd.jp (Postfix) with ESMTP id 633464003B for <user_2@exempl_2.com>; Wed, 12 Apr 2017 01:20:05 +0900 (JST) Received: from pps.filterd (TEVAAV12.commnd.jp [127.0.0.1]) by TEVAAV12.commnd.jp (8.16.0.17/8.16.0.17) with SMTP id v3BFQKOI026949 for <user_2@exempl_2.com>; Wed, 12 Apr 2017 01:20:05 +0900 Received: from tevain03.sv.commnd.jp (TEVAIN03.sv.commnd.jp [192.168.40.23]) by TEVAAV12.commnd.jp with ESMTP id 29pf4hsw8f-1 for <user_2@exempl_2.com>; Wed, 12 Apr 2017 01:20:05 +0900 Received: from exempl_1.com (14-133-71-20.dz.commnd.jp [14.133.71.20]) by TEVAIN03.sv.commnd.jp (Postfix) with ESMTPA id 3F6524003C for <user_2@exempl_2.com>; Wed, 12 Apr 2017 01:20:05 +0900 (JST) Received: from [10.130.200.224] (p199075.mirai.ne.jp [210.172.199.75]) by exempl_1.com (Postfix) with ESMTPSA id 9AE6B83A8802 for <user_2@exempl_2.com>; Wed, 12 Apr 2017 01:20:04 +0900 (JST) To: user_2@exempl_2.com From: user_1 <user_1@exempl_1.com> Subject: =?UTF-8?B?MeODhuOCueODiOODoeODvOODqw==?= Message-ID: <83f0e40a-ad17-90ed-4301-683bf404578e@detox.dip.jp> Date: Wed, 12 Apr 2017 01:19:54 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------B1E5A46C90073A442978500A" Content-Language: en-US X-Proofpoint-Virus-Version: vendor=nai engine=5800 definitions=8495 signatures=668451 X-SPAM-LEVEL: Spam detection results: 0 RCVD_IN_DNSWL_NONE -0.0001 Sender listed at http://yahoo.co.jp/, no trust This is a multi-part message in MIME format. --------------B1E5A46C90073A442978500A Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit テストメール --------------B1E5A46C90073A442978500A Content-Type: text/plain; charset=UTF-8; name="copy.bat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="copy.bat" IHBhdXNlDQogcGF1c2UNCiBjZCBjOlxhYWENCiBtb3ZlIC95IGM6XGFhYVxjYXJ0aWVyNC5o dG0gYzpcYmJiDQogbW92ZSAveSBjOlxhYWFcb21lZ2E0Lmh0bSBjOlxiYmINCiBtb3ZlIC95 IGM6XGFhYVxjb3J1bTQuaHRtIGM6XGJiYg0KIG1vdmUgL3kgYzpcYWFhXHR1ZG9yNC5odG0g YzpcYmJiDQogbW92ZSAveSBjOlxhYWFcYmxlaXRsaW5nNC5odG0gYzpcYmJiDQogcGF1c2Ug --------------B1E5A46C90073A442978500A--
エクセルファイルとbatファイルの2つを添付してもbatファイルの内容が本文に入ってしまいます。
何か解決方法があったら教えてください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー