質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

1回答

4032閲覧

添付ファイルが本文に入ってしまう

sake

総合スコア52

PHP

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

0グッド

0クリップ

投稿2017/04/11 17:31

編集2017/04/12 04:16

こちらのサイトを参考に、メールを解析していますが、添付ファイルに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ファイルの内容が本文に入ってしまいます。
何か解決方法があったら教えてください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/11 22:37

コードを提示していただければ、誰がしかから、助言を頂けるかと思います。
Zuishin

2017/04/12 00:20

他の人は使えているんですよね? だったら使い方が間違っている可能性が大きいですよね? その使い方を詳しく書かないとどこが間違っているのかわからないですよね? どこが間違っているかなどどうでもよくて、正しい使い方が知りたいだけなら、使い方の説明を読めばいいだけですよね?
Zuishin

2017/04/12 03:47

$honbun はどこにありますか?
Zuishin

2017/04/12 04:59

$honbun を追加したあと、動作チェックはしましたか?
sake

2017/04/12 05:14

チェックしました
Zuishin

2017/04/12 05:31

どうなりましたか?
guest

回答1

0

ベストアンサー

追記ここから:

時間がとれたので、検証しようとしましたが、小生の環境には
ReceiptMailDecoder.class.php
がなく、ご提示されたコードを実行出来ませんでした。
お力になれず、すみません。

追記ここまで:

今、検証する時間が取れないので、多分ですが、

ご使用のコードでは、テキストファイルは「添付ファイル」なふりをしながら
Content-Type: text/plain; charset=UTF-8;
なので、受信メールソフトがbase64デコードしてしまい、
本文に表示されている、、、と推測してます。

下記他を参照して、テキストファイルの添付が「Content-Type: text/plain;」にならないロジックを探ってみてください。(この見解自体、まったく根拠・自信なしです。)
前述の通り未検証なので、的外れかもしれないので、他の識者の回答を待つ方がよいかとは思います。

<添付ファイル付のメール送信>
添付ファイル付きメールをmb_send_mail()関数で送信する

試行願い:
ご提示されたコードにて
copy.batをcopy.xlsと拡張子だけを替えて添付してみてください。
多分、添付ファイルになると思います。
もしそうなって、copy.batも添付ファイルとしたいのならば、mb_send_mail()ではなくmail()を使用してください。
MIMEタイプ一覧

投稿2017/04/12 05:22

編集2017/04/12 23:53
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sake

2017/04/15 04:09

アドバイスありがとうございました。 拡張子を変えたら添付ファイルとして認識しました。しかし、だれから送られてくるか分からないので周知徹底することはできません。 mail()は試しました。これはContent-Typeが付かないから、本文を取得できなかったのであきらめました。 今後の運用としては、このような添付ファイルを送ってきた人には理由を説明して再送してもらうようにします。 貴重な時間を割いていただいて、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問