5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPで文字コード「ISO-2022-JP」の機種依存文字を含めたメールを送信する

Last updated at Posted at 2017-08-03

PHPファイルはUTF-8だけれどもメールはISO-2022-JPで送ろうと思ったら文字化け問題で少しハマったので備忘録がてらに公開


今回ハマった原因というのはmb_encode_mimeheader関数。

マニュアルにもあるようにmb_encode_mimeheader関数を使うときの第一関数は…、

エンコードする文字列。 mb_internal_encoding() と同じエンコーディングにしなければいけません。
http://php.net/manual/ja/function.mb-encode-mimeheader.php

ということなので一度mb_internal_encoding関数でファイル内の設定をUTF-8からISO-2022-JPに一時的に変換する必要がある。

この仕様を知らずに文字化け現象にハマってしまった:head_bandage:

サンプルコード

SendMail.php(UTF-8)
<?php
/*
 * このコードの文字コード・言語の設定を取得
 */
$original_encoding = mb_internal_encoding();
$original_language = mb_language();


/*
 * メール送信処理開始
 */
mb_language( 'Japanese' );
mb_internal_encoding("ISO-2022-JP-MS"); // ここからISO-2022-JP-MS

$to       = mb_encode_mimeheader(mb_convert_encoding("㈱イーグルジャンプ","ISO-2022-JP-MS",$original_encoding), 'ISO-2022-JP-MS')." <to@example.com>";
$subject  = mb_encode_mimeheader(mb_convert_encoding("進捗どうですか♪","ISO-2022-JP-MS",$original_encoding), 'ISO-2022-JP-MS');

$body     = mb_convert_encoding("進捗だめです( ^ω^)", 'ISO-2022-JP-MS',$original_encoding);

$headers  = "From: ".mb_encode_mimeheader(mb_convert_encoding("おじさん","ISO-2022-JP-MS"))." <from@example.com> \n";
$headers .= "Content-Type: text/plain; charset=ISO-2022-JP\n";

$params   = "-f return@example.com";


if(mail($to, $subject,$body, $headers,$params)){
    echo "Success!";
}else{

    echo "Fail!";
}

/*
 * 文字コード・言語設定を元に戻す
 */
mb_internal_encoding( $original_encoding );
mb_language( $original_language );

最後に文字コード・言語設定を元に戻すのを忘れないようにしましょ〜〜:rolling_eyes::rolling_eyes:

あとメールクライアントがブラウザでGmailだったりThunderbirdあたりだったら、文字コードの設定が甘くても自動的に変換してくれるのだが、少し古めのメールクライアントだったりすると文字化けすることが多いのでご注意

5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?