PHPプログラミング

レシピ

メール送信

日本語のメールを文字化けしないように送信する:mb_send_mail関数

日本語でメール送信を行うとメールのタイトルや本文が文字化けしてしまうことがあります。今回はそんな時に活躍するmb_send_mail関数と、文字コードの指定方法を解説。

この記事のポイント

  • 日本語のメール文字化け問題を解決する
  • mb_send_mail関数の使い方が分かる
  • 文字コードの指定方法が分かる

目次

文字化けという致命的エラーを回避する

Webサイトやシステムでメールを送信するシステムを実装する場合、日本語のテキストをそのままタイトルや本文に指定すると文字化けしてしまうことがあります。
今回は次のような問題を解決する方法を解説していきます。

  • 日本語のメールが文字化けしてしまう。
  • 文字コードの指定方法が分からない。

文字化けが起こると、当然ですがメールは全く読めません。
さらに文字化けメールばかり送信してしまうと怪しいサーバー(ドメイン)の扱いとなるため注意が必要です。
日本語が文字化けしないメールの送り方を確認していきましょう。

日本語メールの送信はmb_send_mail関数を使用する

日本語はコンピューターの世界ではマルチバイト文字と呼ばれます。
アルファベットのように大文字・小文字、数字だけなら文字の種類も限られますが、日本語はひらがなとカタカナ以外に膨大な数の漢字が存在し、とても複雑。
扱う文字の種類が多い分、アルファベットよりも大きなデータ量が必要になります。
これがマルチバイトと呼ばれる理由です。

PHPにおいてもマルチバイト用のメール関数が用意されており、それがmb_send_mail関数になります。

mb_send_mail関数のコード例

mb_send_mail( $to, $subject, $message, $header, $parameter);

パラメータ(引数)

  • $to – 送信先
  • $subject – 件名
  • $message – 本文
  • $header(オプション) – ヘッダー
  • $parameter(オプション) – パラメーター

3つ目までの送信先、件名、本文は必須項目です。
ヘッダーとパラメータは必要に応じて設定を行いますが、例えばメールがスパム判定されないようにするためにヘッダー情報を記載する際などに指定します。

戻り値

メールの送信に成功した場合はtrueを、失敗した場合はfalseを返します。

コード例

<?php

// 宛先
$to = "yamadataro@gray-code.com";

// 件名
$subject = "メールの送信テスト";

// 本文
$text = "こんにちは。
こちらはテストメールです。

GRAYCODE";

//メール送信
$response = mb_send_mail( $to, $subject, $text);

$responseにはメール送信が成功するとtrue、失敗した場合はfalseが入ります。

日本語と文字コードの指定を行う

より確実に日本語のメールを送信するために、mb_send_mail関数を使用する前に使用する「言語」と「文字コード」を明示的に指定することができます。

コード例

<?php

//言語と文字コードの使用宣言
mb_language("ja");
mb_internal_encoding("UTF-8");

// 宛先
$to = "yamadataro@gray-code.com";

// 件名
$subject = "メールの送信テスト";

// 本文
$text = "こんにちは。
こちらはテストメールです。

GRAYCODE";

//メール送信
$response = mb_send_mail( $to, $subject, $text);

使用する言語の指定ではmb_language関数を使用します。
「日本語」は「Japanese」か「ja」を指定します。

文字コードの指定にはmb_internal_encoding関数を使用します。
Shift_JIS (SJISSJIS-win)、EUC-JPUTF-8UTF-16などを値として指定できます。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。