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

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

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

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

Q&A

解決済

2回答

3213閲覧

PHPメール送受信、一部メーラーでうまく表示しない

rainbowsix

総合スコア102

PHP

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

0グッド

0クリップ

投稿2016/07/01 08:50

編集2016/07/04 02:59

イメージ説明

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}

コードが長くて見難いですが一応追加しておきます。二つのコードのエンコードの仕方が違うみたいですが

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/07/01 09:31 編集

不具合を起こすメーラーでの表示イメージ画像は掲載できますか?(一部黒塗りでも構いませんので。)
rainbowsix

2016/07/01 10:01

画像添付しました。
shi_ue

2016/07/02 04:54 編集

codeプリーズ。Fromの前に無駄な改行が入っているからでしょうね。CRかな?
rainbowsix

2016/07/04 01:35 編集

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!のみ上記のような問題が起こります。ほかのメーラーで受け取った場合はふつうにファイルとして問題なく受け取れます。
shi_ue

2016/07/04 01:51

なんだ、自分で組んだんじゃないんですね。それにbecky!だけなら、becky!の問題でしょう。
rainbowsix

2016/07/04 02:49

申し訳ありませんが一から作れないので流用して作っています。becky!だけの問題かもしれませんがそこを何とかしたいです。 http://qiita.com/KanaeYou/items/b096f8be1f5bbc5448fa ↑のソースで試してみたところbecky!でも問題なくファイルの形で受け取ることができましたがその差がわからなくて困っています。
guest

回答2

0

ベストアンサー

ヘッダーの部分で\r\nを付けていますが、\nだけにしたらどうですか?

投稿2016/07/04 04:07

shi_ue

総合スコア4437

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

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

退会済みユーザー

退会済みユーザー

2016/07/04 04:13

これだと私も思います。送信直前の状態を一旦ファイルに書き出して、改行コードがCRLFって箇所がないか点検してみると良いでしょうね。
rainbowsix

2016/07/07 02:05

まさにそれでした。ありがとうございます!
guest

0

これでしょうか?自分も、メールサーバは違いますが、業務の中で経験したことはあります。

[PHP]mail()でメールヘッダーが本文に・・

投稿2016/07/01 09:33

FKM

総合スコア3608

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

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

退会済みユーザー

退会済みユーザー

2016/07/04 03:33

たぶんqmailの問題ですね。 mail() のマニュアルにも注意がのっています。
rainbowsix

2016/07/04 04:28

これがまた正解だったんですね。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問