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

serverspecによるサーバー自動テスト

最近は管理しているサーバーが多いのと、構成管理ツール(Ansible)なんかをちょくちょく使ってますが、ちゃんと入っているかどうかを確認するのはそれなりに大変だったりします。 が、構成管理ツール自体も …

no image

sudoとsuについて

基本的なことの復習。 Contents1 su2 sudo2.1 wheel su Switch User。読んで字のごとくユーザーを切り替えるコマンドです。 su suzukiでユーザーsuzuki …

no image

サーバー設定ファイルについて nginx

最近はwebサーバーのシェアとしてnginxが徐々に伸びてきていますね。 先日apacheについて解説をしましたが、nginxについて書きたいと思います。 Contents1 設定ファイル2 参考リン …

no image

一般的なサーバー監視コマンド

一般的な監視コマンドをメモします。 Contents1 ネットワーク状況1.1 ping1.2 traceroute ネットワーク状況 ping ネットワークの通信が正常かどうかをみる最も一般的なコマ …

no image

Route53でのドメイン取得&メール送信に関して

以前、Route53でドメイン取得、メールの送受信などをメモしましたが、Route53でのドメイン登録→メール送信に関してもう一度記しておこうと思います。 Amazon SESについて(Route53 …