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

Mailtrap テスト環境でメール送信を試したい時に使えるサービス

メールが絡んだ時のテストって難しいですよね・・・ ここだけは本番化した時に、1、2度お客さんに連絡して仕方なく本番でテスト・・・なんてことをやっておりましたが、つい最近、メールのテストが気軽にできるサ …

no image

SMTP-AUTHのメール送信

メールに関して以前にもこんなこと書きましたが、今更ながらトラブルが起きたのでしっかり理解しておかないと・・・ 基礎が弱いと困るのう・・・ ロリポップなどのサーバーでmb_send_mailを打てばよく …

no image

Dockerでのメール送信に関して

Docker内でメール送信したいときなど。 通常であればWebコンテナ用にphp-7.4などのapache(or nginx)だけの最小構成になっていることがほとんどだと思いますので、メール送信ができ …

no image

PHPMailerに関して(PHPのメール送信)

PHPのMailライブラリに関して。 今までmb_send_mailとかで誤魔化してましたが、以下のようにライブラリで送るケースのサンプル。 https://github.com/umanari145 …

no image

POP3を使ったメール受信

メールの送信と比べると、プログラムで描く頻度は少ないですが、メールの受信について。 Contents1 POP3サーバー2 プログラムにてPOP3サーバーと通信3 PHPにてメールを取得する場合 PO …

アーカイブ