カテゴリ: PHP 更新日: 2026/05/06

PHPのメール送信で必ず知っておきたいエンコーディング入門(UTF-8・Base64)

PHP の メールのエンコーディング(UTF-8, Base64)
PHP の メールのエンコーディング(UTF-8, Base64)

先生と生徒の会話形式で理解しよう

生徒

「PHPでメールを送ったら、日本語が文字化けしてしまいました…」

先生

「それはメールのエンコーディング設定が原因かもしれませんね。」

生徒

「エンコーディングって、そもそも何ですか?」

先生

「文字をコンピュータが理解できる形に変換するルールのことです。PHPのメール送信ではとても重要ですよ。」

1. メール送信で起こる文字化けとは?

1. メール送信で起こる文字化けとは?
1. メール送信で起こる文字化けとは?

PHPでメール送信を行うとき、初心者が最初につまずきやすいのが文字化けです。文字化けとは、本来「こんにちは」と表示されるはずの文字が、意味不明な記号や英数字に変わってしまう現象を指します。これは、送信側と受信側で文字の解釈方法が一致していないことが原因です。人間でいうと、同じ言葉でも日本語と英語で意味が通じない状態に似ています。

2. エンコーディングとは何かを超やさしく解説

2. エンコーディングとは何かを超やさしく解説
2. エンコーディングとは何かを超やさしく解説

エンコーディングとは、文字をコンピュータが扱える数値の並びに変換する決まりです。私たちが見る「あ」や「A」は、そのままではコンピュータは理解できません。そこで「この数字の並びは、この文字」という対応表を使います。この対応表の種類がUTF-8やBase64です。メールでは、この変換方法を正しく指定しないと、日本語が壊れてしまいます。

3. UTF-8とは?日本語メールの基本ルール

3. UTF-8とは?日本語メールの基本ルール
3. UTF-8とは?日本語メールの基本ルール

UTF-8は、世界中の文字を扱えるエンコーディング方式です。日本語、英語、記号、絵文字まで幅広く対応しています。PHPでメールを送る場合、本文のエンコーディングはUTF-8にするのが基本です。特に日本語メールでは、UTF-8を指定しておくことで、文字化けの多くを防ぐことができます。


mb_language("Japanese");
mb_internal_encoding("UTF-8");

$to = "test@example.com";
$subject = "テストメール";
$message = "これはUTF-8で送信するテストメールです。";
$headers = "From: sample@example.com";

mb_send_mail($to, $subject, $message, $headers);

4. Base64とは?件名で使われる理由

4. Base64とは?件名で使われる理由
4. Base64とは?件名で使われる理由

Base64は、文字を英数字だけで表現するための変換方法です。メールの件名は、環境によっては日本語をそのまま扱えないことがあります。そこで、日本語の件名を一度Base64に変換して送信します。これは、日本語を安全な形で箱に入れて届けるイメージです。


$subject = "日本語の件名テスト";
$encoded_subject = "=?UTF-8?B?" . base64_encode($subject) . "?=";

5. メールヘッダーとエンコーディングの関係

5. メールヘッダーとエンコーディングの関係
5. メールヘッダーとエンコーディングの関係

メールには本文だけでなく、ヘッダーと呼ばれる情報部分があります。送信元、件名、文字コードの指定などが含まれます。ここでエンコーディングを正しく指定しないと、本文がUTF-8でも件名だけ文字化けすることがあります。特に「Content-Type」の指定は重要です。


$headers = "";
$headers .= "From: sample@example.com\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\n";

6. 日本語メールを安全に送る基本パターン

6. 日本語メールを安全に送る基本パターン
6. 日本語メールを安全に送る基本パターン

初心者の方は、難しい設定を組み合わせるよりも、まずは基本形を覚えることが大切です。UTF-8で本文を作り、件名はBase64で変換する。この流れを守るだけで、ほとんどの日本語メールは正しく送信できます。


mb_language("Japanese");
mb_internal_encoding("UTF-8");

$to = "test@example.com";
$subject = "お問い合わせありがとうございます";
$subject = "=?UTF-8?B?" . base64_encode($subject) . "?=";
$message = "内容を確認して、後ほどご連絡いたします。";

$headers = "From: info@example.com\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\n";

mb_send_mail($to, $subject, $message, $headers);

7. エンコーディングを理解すると何が嬉しい?

7. エンコーディングを理解すると何が嬉しい?
7. エンコーディングを理解すると何が嬉しい?

エンコーディングを理解すると、メール送信だけでなく、画面表示やファイル保存でもトラブルを防げるようになります。特にPHPでは、日本語を扱う場面が多いため、UTF-8とBase64の考え方を知っておくことは大きな安心につながります。パソコンに慣れていない方でも、この仕組みを知ることで「なぜこうなるのか」が分かるようになります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHPでセッションを使ってフォーム入力を保持する方法を解説!初心者向けステップバイステップ
New2
PHP
PHP の文字列の基本操作(連結・切り出し・長さ)の使い方
New3
PHP
PHPのメール送信でSPF・DKIM認証設定を完全解説!初心者でもわかるメール認証の基本
New4
Python
PythonでAPIのパフォーマンスを向上させる方法!キャッシュ活用を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.5
Java&Spring記事人気No5
PHP
PHPのHTMLメールの作成方法を完全ガイド!初心者でもわかるメール送信の基本
No.6
Java&Spring記事人気No6
Python
Pythonの例外を発生させる方法を完全解説!raise文の使い方を初心者向けにやさしく説明
No.7
Java&Spring記事人気No7
Python
Pythonで2次元リストを作成・操作する方法(リストのリスト)
No.8
Java&Spring記事人気No8
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方