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

nginxの設定ファイルの書き方に関して

Contents1 設定ファイルの構成と基本用語1.1 ディレクティブ1.2 コンテキスト2 基本的なディレクティブの遷移2.1 serverディレクティブ2.2 locationディレクティブ2.3 …

no image

firewall復習 ansibleコマンドもかねて

CentOS7ではファイアーウォールの設定をfirewallというコマンドで行います。要はportのブロックですね。 以前下記リンクでもfirewallについて書いたんですが、あまり理解もできていなか …

no image

追跡ブランチからローカルブランチを作る方法~ (svn→gitの移行など)

SVNで運用されていたプロジェクトをgitに移行する機会があったのでその時のメモなどを。 思ってたよりは楽だったかな・・・ Contents1 準備2 実際の移行(git svn clone)3 gi …

no image

Git+SSH鍵認証

鍵認証をともなったgitのpushやpullについて。 中央リポジトリに公開鍵がおいてあり、リモートリポジトリに秘密鍵を配置します。 ステップとしては以下の2ステップになります。実行時ユーザーのディレ …

no image

メール送信に関して その2 メールメッセージのデータ形式

前回に引き続き、メールのメッセージ構造について書きたいと思います。 Contents1 大まかな構造2 ヘッダ部2.1 メールアドレス2.2 From/Sender/Reply-To2.3 To/Cc …