PHPプログラミング

ベストプラクティス

メール送信

メールの送信元が文字化けした時の対処方法:mb_encode_mimeheader関数

  • このエントリーをはてなブックマークに追加

メールの送信元(配信元)が文字化けしてしまったときのための、mb_encode_mimeheader関数を使った対処法を解説します。

目次

  1. #  本文だけじゃない文字化け
  2. #  メール送信に使用するコード

本文だけじゃない文字化け

本文が文字化けしてしまう事案がたまに発生しますが、文字化けは本文だけじゃありません。
ヘッダー部分でも起こります。
そこで今回は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

以上、送信元の文字化け対処方法でした。

  • このエントリーをはてなブックマークに追加