skillup

技術ブログ

サーバー・ネットワーク

メールの文字化け対策

投稿日:2018年7月17日 更新日:

メールの文字コードに関して、色々ごまかしながらやってましたが真面目に取り組む必要があり、ここでメモ。

前提条件

メール送信のプログラム自体はUTF-8で保存。PHPならmb_internal_encoding(“UTF-8”)を忘れない。

ヘッダー部分

大事なこととして、メール本文とヘッダー部分に関しては切り離して考える必要あり。ヘッダー部分はFromやSubjectなどの情報ですね。どちらかと言うとこっちの方が本文より文字化けしやすい印象です。

簡単にまとめると以下のような感じ。

  • もともとの経緯で古い環境だと7bit文字しか使えずUTF8が文字化けする可能性がある。
  • そのためISO-2022-JPで送る必要あり。
  • ただし、マルチバイト言語を使う場合、base64と言うエンコーディング方式で変換する必要がある

例えばPHPであれば下記のような処理をしてヘッダーを処理することが一般的です。

このような方法で送るとメール送信時のログが下記のようになっているはずです。

メール本文

色々調べましたが、全環境でOKな方法はないようです。

ISO-2022-JPかUTF-8のどちらかで送るのが一般的なようです。

今メールボックスにきているメールのソースを見てみましたが半々ぐらいでしたね・・・

Content-Transfer-Encoding

Content-Transfer-Encodingはメール本文の変換方法ですが、ISO-2022-JPの場合は7bitとするのが一般的なようです。UTF-8の場合は指定に際して記述がありませんでしたね・・実際のメールでは8bitとbase64が多いようです。

メールの文字コードですが、ややこしいことに適当な方法で書いても環境によってはうまくいってしまうことが多々あります。(文字化け全般に繋がることですが・・)

参考リンク

メールのヘッダをちょっと分析してみました

base64ってなんぞ??理解のために実装してみた

[PHP]件名も!送信者も!本文も!mail関数で文字化けしないMailHeader設定

Content-Transfer-Encoding【メールヘッダ】

-サーバー・ネットワーク
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

mod_aliasに関して

同一ドメインでパスによってルートディレクトを分けたい時。 この場合、apacheの設定ファイルをいじることになります。 一般的にはhttpd.confではなく*.confと言った設定ファイルを使い、エ …

no image

任意のログファイルのログローテションについて

本日は自作のログファイルをうまくローテーションさせる方法について。 自作でログを作っておりますと、日がたつにずれどんどんと容量が膨らんでいきます。 放置するととんでもない量になっていることが多いですね …

no image

ネットワーク基礎 OSI参照モデルなど

ここ↓でネットワークの基礎についてかいてあるので定期的に勉強しようと思っています。 http://www5e.biglobe.ne.jp/aji/3min/ Contents1 スニーカーネットからリ …

no image

PHP_CodeSnifferによるコードチェック

昨日の記事でphpmdという静的解析ツールを調査したんですが、それ以外にも規約にのっとっているかどうかコーディングをチェックできるツールはあります。 PHP_CodeSniffer https://g …

no image

nginxによる一般的なwebサーバーの構築

今回は一般的なwebサーバーでよく利用するnginxの基本機能を紹介します。 サーバー・インフラ徹底攻略の3章になります。 Contents1 バーチャルホストを利用する1.1 IPアドレスベースのバ …