最終更新日:
公開日:
レシピ
メール送信
メールの送信元が文字化けした時の対処方法:mb_encode_mimeheader関数
メールの送信元(配信元)が文字化けしてしまったときのための、mb_encode_mimeheader関数を使った対処法を解説します。
この記事のポイント
- mb_encode_mimeheader関数の使い方が分かる
- メールのヘッダー情報に文字コードを設定する
目次
文字化けは本文だけじゃない
本文が文字化けしてしまう事案がたまに発生しますが、文字化けは本文だけじゃありません。
文字化けはヘッダー部分でも起こります。
そこで今回はmb_encode_mimeheader関数を使った文字化けへの対処方法を解説します。
メール送信部分のコードについては、「送ったメールがスパム判定(迷惑メール)されないためのヘッダー設定」で書いたものを使います。
メール送信に使用するコード
今回使用するコードはこちら。
コード例
<?php
//言語と文字コードの使用宣言
mb_language("ja");
mb_internal_encoding("UTF-8");
// 宛先
$to = "yamadataro@gray-code.com";
// 件名
$subject = "メールの送信テスト";
// 本文
$text = "こんにちは。
こちらはテストメールです。";
// 送信元
$from = mb_encode_mimeheader("GRAYCODE事務局") . " <noreply@gray-code.com>";
// 送信元メールアドレス
$from_mail = "noreply@gray-code.com";
// 送信者名
$from_name = mb_encode_mimeheader("GRAYCODE事務局");
// 送信者情報の設定
$header = '';
$header .= "Content-Type: text/plain \r\n";
$header .= "Return-Path: " . $from_mail . " \r\n";
$header .= "From: " . $from ." \r\n";
$header .= "Sender: " . $from ." \r\n";
$header .= "Reply-To: " . $from_mail . " \r\n";
$header .= "Organization: " . $from_name . " \r\n";
$header .= "X-Sender: " . $from_mail . " \r\n";
$header .= "X-Priority: 3 \r\n";
//メール送信
$response = mb_send_mail( $to, $subject, $text, $header);
「// 送信元」と「// 送信者名」の部分で、mb_encode_mimeheader関数を使って文字コードのエンコードを行っています。
エンコードする際には任意の文字コードを指定することもできますが、指定しない場合は「mb_internal_encoding」で指定した文字コードが適用されます。
上記の場合だと「//言語と文字コードの使用宣言」で指定している「UTF-8」になります。
あらかじめエンコードした送信者情報を変数$fromと$from_nameに格納し、ヘッダー情報の設定で使用しています。
もし文字コードを指定したい場合は、次のように第2パラメータ以降で指定してください。
コード例
mb_encode_mimeheader( $from_name, "UTF-7", "Q");
文字コードの指定以外にも、MIMEエンコーディング方式を指定したり、行末のマーカを指定することができます。
詳しくはphp.netの下記ページを参照ください。
mb_encode_mimeheader関数 – php.net
以上、送信元の文字化け対処方法でした。