From: =?ISO-2022-JP?B?GyRCJUYlOSVIGyhC?= <hoge@hoge.com> Content-Transfer-Encoding: 7bit Content-type: multipart/mixed; boundary="e5db8e22e488e44fc4748bc3f91d0556" Message-Id: <20160701083717.5543663AAB@localhost.localdomain> Date: Fri, 1 Jul 2016 17:37:17 +0900 (JST) --e5db8e22e488e44fc4748bc3f91d0556 Content-Type: text/plain; charset="ISO-2022-JP" Content-Transfer-Encoding: 7bit テスト様より、下記内容でお問い合わせが届いています。 ■お名前 テスト
PHPメールフォームを作成しています。
yahooやgmailなどではなんの問題なく表示されますが。
会社のメーラー(Becky!)では上記のようにヘッダー情報などが本文に出てしまいます。
何が問題だと考えられますか?
ソースを追加すると
becky!未対応
1public function adminSend() { 2 // 送信先の設定 3 foreach ($this->adminArray as $value) { 4 $this->sendMail[] = mb_encode_mimeheader($this->adminName, "ISO-2022-JP-MS","UTF-8") ." <" . trim($value) . ">"; 5 } 6 7 // タイトルの設定 8 $this->sendTitle = "{$this->requiredItem["name"]}様よりお問い合わせ"; 9 $this->sendTitle = mb_encode_mimeheader($this->sendTitle, "ISO-2022-JP-MS","UTF-8"); 10 11 // メッセージの設定 12 $this->sendMessage = "{$this->requiredItem["name"]}様より、下記内容でお問い合わせが届いています。\n"; 13 $this->sendMessage .= "\n"; 14 foreach ($this->submitContent as $key => $value) { 15 $this->sendMessage .= "■{$key}\n"; 16 $this->sendMessage .= "{$value}\n\n"; 17 } 18 $this->sendMessage .= "\n\n"; 19 $this->sendMessage .= "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"; 20 $this->sendMessage .= "[送信日時]".date("Y年m月d日(D) H時i分s秒")."\n"; 21 $this->sendMessage .= "[IPアドレス]{$this->server["REMOTE_ADDR"]}\n"; 22 $this->sendMessage .= "[ホスト]{$this->server["REMOTE_HOST"]}\n"; 23 $this->sendMessage .= "[USER_AGENT]{$this->server["HTTP_USER_AGENT"]}\n"; 24 $this->sendMessage .= "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"; 25 $this->sendMessage = mb_convert_encoding($this->sendMessage, "ISO-2022-JP-MS","UTF-8"); 26 27 //ヘッダーの設定 28 $this->sendHeaders = "X-Mailer: PHP5\r\n"; 29 $this->sendHeaders = "MIME-Version: 1.0\r\n"; 30 $this->sendHeaders .= "From: ".mb_encode_mimeheader($this->requiredItem["name"], "ISO-2022-JP-MS","UTF-8") ." <{$this->requiredItem["mailaddress"]}> \r\n"; 31 $this->sendHeaders .= "Content-Transfer-Encoding: 7bit\r\n"; 32 33 // 添付ファイルの設定 34 if (!empty($this->submitFile)) { 35 $this->sendHeaders .= "Content-type: multipart/mixed; boundary=\"{$this->boundary}\" \r\n"; 36 37 $tmpMessage = $this->sendMessage; 38 39 $this->sendMessage = "--{$this->boundary}\n"; 40 $this->sendMessage .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; 41 $this->sendMessage .= "Content-Transfer-Encoding: 7bit\n\n"; 42 $this->sendMessage .= $tmpMessage."\n"; 43 44 foreach ($this->submitFile as $key => $value) { 45 foreach ($value as $key2 => $value2) { 46 $name = $key2; 47 $f_encoded = $value2; 48 49 $this->sendMessage .= "\n"; 50 $this->sendMessage .= "--{$this->boundary}\n"; 51 $this->sendMessage .= "Content-Type: application/octet-stream; "; 52 $this->sendMessage .= "charset=\"ISO-2022-JP\" "; 53 $this->sendMessage .= "name=\"".mb_encode_mimeheader($name, "ISO-2022-JP-MS","UTF-8")."\"\n"; 54 $this->sendMessage .= "Content-Transfer-Encoding: base64\n"; 55 $this->sendMessage .= "Content-Disposition: attachment; "; 56 $this->sendMessage .= "filename=\"".mb_encode_mimeheader($name, "ISO-2022-JP-MS","UTF-8")."\"\n"; 57 $this->sendMessage .= "\n"; 58 $this->sendMessage .= "{$f_encoded}\n"; 59 } 60 } 61 62 $this->sendMessage .= "--{$this->boundary}--\n"; 63 64 } else { 65 $this->sendHeaders .= "Content-type: text/plain; charset=\"ISO-2022-JP\" \r\n"; 66 } 67 68 // メールの送信 (宛先, 件名, 本文, 送り主(From:が必須)) 69 foreach ($this->sendMail as $send) { 70 @mail($send, $this->sendTitle, $this->sendMessage, $this->sendHeaders); 71 } 72 }
becky!でもファイル1個は問題なく受信できたソース
1function sendmail_jpn($to, $subject, $message, $from_email,$from_name, $filepath01, $filepath02) 2{ 3$mime_type = "application/octet-stream"; 4 5// 添付ファイルのエンコード 6$filename01 = basename($filepath01); 7$filename02 = basename($filepath02); 8 9 10// マルチパートなので、パートの区切り文字列を指定 11$boundary = '----=_Boundary_' . uniqid(rand(1000,9999) . '_') . '_'; 12 13// 件名のエンコード 14$subject = mb_convert_encoding($subject, 'ISO-2022-JP', 'auto'); 15$subject = mb_encode_mimeheader_ex($subject); 16 17// 本文のエンコード 18$message = mb_convert_encoding($message, 'ISO-2022-JP', 'auto'); 19 20// toをエンコード 21// $to = mb_convert_encoding($mail['to']['name'], "auto", "auto"); 22$to = "=?ISO-2022-JP?B?" . base64_encode($to) . '?= <' . $to . '>'; 23 24// fromをエンコード 25$from_name = mb_convert_encoding($from_name, 'ISO-2022-JP', 'auto'); 26$from = "=?ISO-2022-JP?B?" . base64_encode($from_name) . '?= <' . $from_email . '>'; 27 28// 添付ファイルのエンコード01 29$filename01 = mb_convert_encoding($filename01, 'ISO-2022-JP', 'auto'); 30$filename01 = "=?ISO-2022-JP?B?" . base64_encode($filename01) . "?="; 31 32// 添付ファイルのエンコード02 33$filename02 = mb_convert_encoding($filename02, 'ISO-2022-JP', 'auto'); 34$filename02 = "=?ISO-2022-JP?B?" . base64_encode($filename02) . "?="; 35 36// ヘッダーの指定 37$head = ""; 38$head .= "From: {$from}\n"; 39$head .= "MIME-Version: 1.0\n"; 40$head .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\n"; 41$head .= "Content-Transfer-Encoding: 7bit"; 42 43$body = ""; 44 45// 本文 46$body .= "--{$boundary}\n"; 47$body .= "Content-Type: text/plain; charset=ISO-2022-JP;" . 48"Content-Transfer-Encoding: 7bit\n"; 49$body .= "\n"; 50$body .= "{$message}\n"; 51$body .= "\n"; 52 53// 添付ファイルの処理01 54$body .= "--{$boundary}\n"; 55$body .= "Content-Type: {$mime_type}; name=\"{$filename01}\"\n" . 56"Content-Transfer-Encoding: base64\n" . 57"Content-Disposition: attachment; filename=\"{$filename01}\"\n"; 58$body .= "\n"; 59 60$fp = fopen( $filepath01, "r" ) or die("Error on mailing. (attachment file cannot open)"); 61$contents01 = fread( $fp, filesize($filepath01) ); 62fclose( $fp ); 63$f_encoded01 = chunk_split(base64_encode($contents01)); //添付ファイルをbase64エンコードする 64 65// 添付ファイルの処理02 66$body .= "--{$boundary}\n"; 67$body .= "Content-Type: {$mime_type}; name=\"{$filename02}\"\n" . 68"Content-Transfer-Encoding: base64\n" . 69"Content-Disposition: attachment; filename=\"{$filename02}\"\n"; 70$body .= "\n"; 71 72$fp = fopen( $filepath02, "r" ) or die("Error on mailing. (attachment file cannot open)"); 73$contents02 = fread( $fp, filesize($filepath02) ); 74fclose( $fp ); 75$f_encoded02 = chunk_split(base64_encode($contents02)); //添付ファイルをbase64エンコードする 76 77$body .= "{$f_encoded01}\n\r"; 78//var_dump($body); 79$body .= "{$f_encoded02}\n"; 80$body .= "\n"; 81 82 83 84if (mail($to, $subject, $body, $head)) { 85echo 'sendmail_jpn : OK.'; 86} else { 87echo 'sendmail_jpn : FAILURE.'; 88} 89}
コードが長くて見難いですが一応追加しておきます。二つのコードのエンコードの仕方が違うみたいですが
不具合を起こすメーラーでの表示イメージ画像は掲載できますか?(一部黒塗りでも構いませんので。)
画像添付しました。
codeプリーズ。Fromの前に無駄な改行が入っているからでしょうね。CRかな?
http://web-dev.xyz/php-originalmailfrom/ や http://dounokouno.com/2011/10/13/copyright%E8%A1%A8%E7%A4%BA%E4%B8%8D%E8%A6%81%E3%81%AEphp%E8%A3%BD%E6%B1%8E%E7%94%A8%E3%83%A1%E3%83%BC%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%80%8Ctransmit/ をそのまま使って送ってみた結果なんですがメーラーがbecky!のみ上記のような問題が起こります。ほかのメーラーで受け取った場合はふつうにファイルとして問題なく受け取れます。
なんだ、自分で組んだんじゃないんですね。それにbecky!だけなら、becky!の問題でしょう。
申し訳ありませんが一から作れないので流用して作っています。becky!だけの問題かもしれませんがそこを何とかしたいです。
http://qiita.com/KanaeYou/items/b096f8be1f5bbc5448fa
↑のソースで試してみたところbecky!でも問題なくファイルの形で受け取ることができましたがその差がわからなくて困っています。
回答2件
あなたの回答
tips
プレビュー