skillup

技術ブログ

サーバー・ネットワーク

メールの文字化け対策

投稿日:

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

前提条件

メール送信のプログラム自体は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

scpコマンドを使ったサーバー間のファイルのやり取り

あるサーバーのファイルを別サーバーにコピーするとき、大昔はFTPを使っていましたが、現在FTPサーバー自体を立てることがあまりないため、SSHを使ったSCPコマンドでのファイル点を使いました。 Con …

no image

PHP7に関して

先週きづいたのですが、PHPが5.6から7になりましたね。 まあ当分はまだPHP5で開発していきますが、herokuがいきなり7になり、アプリが動かないということが起こりました。 7対応させたかったん …

no image

サーバーの過負荷の発見 メモリ使用率の調査&抽出、置換(awk,sed)コマンドについて

前回、サーバーの負荷調査について記事を書いたので、それに関するスクリプトを。 Contents1 仕様2 ソース3 解説3.1 freeコマンド3.2 awk3.3 sed 仕様 日付とメモリ使用率、 …

no image

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

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

no image

メニュー系のCSS

よく迷うのでこれを機にまとめておこうかと。 Contents1 通常時のメニュー2 携帯(いわゆる縦のメニュー)3 ホバー時の画像選択4 小ネタ 選択されているときのメニュー 通常時のメニュー htm …