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

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

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

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

3回答

4056閲覧

Codeigniter というフレームワークでメールを送信すると文字化けが発生する

hidepon

総合スコア206

PHP

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2017/09/06 09:23

Codeigniter というPHPのフレームワークを用いて、WEBからメール送信を行っています。
このとき、特定のメーラー(メールソフト)で受信をした際に、大惨事的な文字化けを引き起こしてしまいます。
おそらく、Outlookかなと推察してます。
その他のメーラでは特段の問題は起こってはいません。
エンコードの問題でしょうか?
ヘッダの問題でしょうか?
メール送信の仕組みはマニュアルをコピペする感じで作成しています。

private function Send_Reply_Mail($conv){ //SESSIONデータ $session_array = array(); $session_array = $this->session->all_userdata(); //POSTデータ $post_array = array(); $post_array = $this->input->post(); //reply_toのアドレス設定 $this->email->reply_to("reply@hoge.jp"); //fromのアドレス設定 $this->email->from("from@hoge.jp"); $bcc = $post_array["bcc"]; $bcc = explode(",", $bcc); array_push($bcc,"bcc@hoge.jp"); //bccのアドレス設定 $this->email->bcc($bcc); //タイトル $this->email->subject($post_array["subject"]); //toのアドレス設定 $this->email->to($conv["email"]); //メールのメッセージ内容 $message = $this->Set_Message($post_array["contents"],$conv["name"]); //メッセージの設定 $this->email->message($message); //送信成功 if($this->email->send()){ //DBに完了登録 $this->contact->Finish_Send_Reply_Mail(); //権限により振り分けるメニューのテンプレートファイル $template_array = array(); $template_array = $this->array_constant->template_array(); $template = $this->common->Set_Template($template_array,$session_array); $data["title"] = "お問い合わせ返信(完了)"; //HeaderのVIEW $this->load->view('/header/admin/ha013',$data); //MenuのVIEW $this->load->view('/admin/menu/'.$template,$data); $this->load->view('/admin/contact/contpl_008',$data); }else{ //メール送信失敗時の処理(管理者にメール送信を行う) //fromのアドレス設定 $this->email->from($array["from_mail"]); //reply_toのアドレス設定 $this->email->reply_to($array["from_mail"]); //タイトル $this->email->subject("メール送信失敗。管理番号[".$session_array["reply_mail_id"]."]"); //toのアドレス設定 $this->email->to("to@bar.jp"); //メールのメッセージ内容 $message = $this->Set_Message_For_Admin(); //メッセージの設定 $this->email->message($message); $this->email->send(); //権限により振り分けるメニューのテンプレートファイル $template_array = array(); $template_array = $this->array_constant->template_array(); $template = $this->common->Set_Template($template_array,$session_array); $data["title"] = "お問い合わせ返信(失敗)"; //HeaderのVIEW $this->load->view('/header/admin/ha013',$data); //MenuのVIEW $this->load->view('/admin/menu/'.$template,$data); $this->load->view('/admin/contact/contpl_013',$data); } }

対処方法をご存知の方がいらっしゃいましたら教えて頂ければと思います。

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

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

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

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

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

guest

回答3

0

Codeigniter で日本語メールを送信するときに失敗しない方法
検証していないですけど、この辺の記事が参考になるかと。

追記
このあたりが理由のようです。
CodeIgniterでISO-2022-JPでメールを送信すると特定の日本語で文字化け
昔からある現象のようですね。

投稿2017/09/06 09:56

編集2017/09/06 10:01
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

codeigniterのメールライブラリは日本語のメールをうまく処理してくれないです。
メールライブラリの内部の処理がいろいろ余計なことしてくれるため、ライブラリの外側でいろいろやったとしても現実の日本語メーラーに対応しきれません。
codeigniterのメールライブラリは英語圏向けのメールライブラリだと考えて良いと思います。

いろいろ試しましたが最終的にcodeigniterで一番楽で一番問題の少ない日本語メール送信の仕方はPEAR::Mailを使うことでした。

投稿2017/09/06 13:13

oskbt

総合スコア1895

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

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

0

ベストアンサー

最近のメーラーはほとんどがUTF-8も解釈できるようになってきていますが、古いメーラーや古いバージョンの場合はJISが基本になっています。手元のメーラーで文字化けしている場合は、エンコードに問題があると思われます。

下記のようにメールの表題と、本文のエンコードをJISに変換してみてはいかがでしょうか。

$post_array連想配列にUTF-8のまま残しておきたい要素があったり、連想配列の要素がパフォーマンスを無視できない量であるならば、キーを指定して($post_array['subject']などのように)それぞれエンコード変換したほうが良いと思います。

php

1 private function Send_Reply_Mail($conv) 2 { 3 ... 4 // エンコードをJISに変換 5 $post_array = mb_convert_encoding($post_array, 'ISO-2022-JP', 'UTF-8,auto'); 6 7 //タイトル 8 $this->email->subject($post_array["subject"]); 9 ... 10 //メールのメッセージ内容 11 $message = $this->Set_Message($post_array["contents"],$conv["name"]); 12 ...

投稿2017/09/06 10:09

Tomak

総合スコア1652

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問