メールのタイトルが文字化けして困っています。
モジュール09異常フラグ という文字が
モジュー_k09異常フラグ という文字になったり、
湿度センサ という文字が
湿度セン_5 という文字になったりします。
ちなみに同じ文字を本文に掲載すると文字化けしません。
また、メーラーによっては文字化けしないものもあり、
shurikenというメーラでは文字化けしません。
docomoの携帯やフリーのsylpheedというメーラーではNGでした。
環境設定の変更などで修正できるものなのでしょうか?
どなたがご存じの方いらっしゃいましたらご教授お願いします。
TNK - 投稿数: 4730
Zabbix標準のメール送信機能を利用されていませんか?
Zabbix標準のメール送信機能を利用すると、UTF-8を利用したメー
ル送信になりますので環境によっては文字化けが発生してしまう
ようです。
インターネットメール標準のISO-2022-JPでメールを送るようにさ
れたい場合は、以下のURLにある「日本語アラートメールの送信方
法」で紹介されているメール送信用スクリプトを利用してみては
いかがでしょうか。
http://www.zabbix.jp/modules/bwiki/
t-kmr - 投稿数: 12
ご回答ありがとうございます。
charsetも"iso-2022-jp"にしており、
記載のURLの設定(Zabbix標準ではないメール機能)で
メール送信しています。
TNK - 投稿数: 4730
スクリプトは複数紹介されていますが、どのスクリプトを利用され
ていますか?
あと、利用されている環境の詳細情報もお教え下さい。
Zabbixサーバ:
・OS、バージョン
・Zabbixのバージョン及び導入方法
・利用されているDBMSとバージョン、そしてDBの文字コード
t-kmr - 投稿数: 12
ご返信遅くなりすみません。
スクリプトは、上記回答いただいたURLページのスクリプトです。
(sendmessage_smtp_php.sh)
Zabbixサーバ:
・OS、バージョン:Red Hat Enterprise Linux 5.3 64bit
・Zabbixのバージョン及び導入方法:
Zabbix 1.8.5 yumダウンロードによるインストール
(とあるクラウドサービスを利用したクラウドサーバ上に導入)
・利用されているDBMSとバージョン、そしてDBの文字コード
DBMS:MySQL
文字コード:default-character-set=utf8
skip-character-set-client-handshake
宜しくお願いします。
tsuzuki - 投稿数: 78
鈴木です。
情報ありがとうございます。
たぶん、原因がわかりました。
今回の問題は、メールのsubjectに長い日本語文字列を設定した場合に関連して発生していました。
以下のファイルで差し替えて正常に動作するか確認していただけますか?
http://dev.blue.skydetector.net/zbx/sendmessage_smtp_php/sendmessage_smtp_php.sh
以下、詳細な説明になります。
このあたりの話は複雑になりがちなので、どうしても冗長な説明になってしまいます。
■[原因]
今回の問題は、メールのsubjectに長い日本語文字列を設定すると発生していました。
長い日本語文字列を設定した場合、PHPスクリプト内部で使用している mb_encode_mimeheader() 関数がMIMEエンコード時に改行を入れるのですが、日本語の文字データの途中かどうかを気にせず改行していたために文字化けしていました。
(そのため、「モジュール09異常フラグ」の「ル」の2バイト目の「k」や、「湿度センサ」の「サ」の2バイト目の「5」が出てきていた)
■[対処内容]
日本語の文字データの途中で改行を入れないよう、mb_internal_encoding を JIS にして、mb_encode_mimeheader() の第2引数にも JIS を設定することで修正を入れました。
http://dev.blue.skydetector.net/zbx/sendmessage_smtp_php/sendmessage_smtp_php.sh
■[補足事項]
なお、ISO-2022-JPでなく、JISを使用している理由ですが、ISO-2022-JPでは半角カナを扱うことができないため、ISO-2022-JPに半角カナが追加されているJISを使用しています。
このあたりのことは例えば小飼弾さんが言及されています。
http://blog.livedoor.jp/dankogai/archives/51061651.html
■[制限事項]
上記対処方法を適用した場合でも、いくつか仕様上の制限は残ります。
ISO-2022-JPやJIS自体が丸文字や梯子高などを仕様としてサポートしていないため、これらの丸文字や梯子高は表示できずに「?」などに変換されます。
■[制限事項に対するバッドノウハウを使用した対処方法]
上記制限事項に対しても、正式に認定されていない文字エンコード「ISO-2022-JP-MS」を使用すれば回避することが可能です。
世の中では、「ISO-2022-JP-MS」の形式ならば受け付けられるメールクライアントが多いようなので、現実的な解としては「ISO-2022-JP-MS」が良いかもしれません。
これならば、丸文字や梯子高も使用できます。
PHP5.2.1以降ならば、「ISO-2022-JP-MS」を使用できるので、その場合は以下を使用してみてください。
http://dev.blue.skydetector.net/zbx/sendmessage_smtp_php/sendmessage_smtp_php__iso-2022-jp-ms.sh
よろしくお願いします。
t-kmr - 投稿数: 12
情報投稿いただけているのに、ご返答できておらず
大変失礼いたしました。申し訳ありません。
結論から言いまして、お教えいただいたやり方で
おかげさまで無事解決いたしました!
本当にありがとうございました。
ご協力ありがとうございます。
tsuzuki - 投稿数: 78
こちらこそ確認ありがとうございました。
後で更新版を差し替えておきます。
ikemo - 投稿数: 48
自分も同じ症状になります
Zabbixサーバ:1.8.5
OS:CentOS5.6
Zabbix導入方法:yum
DB:mysql5.0.77
DB文字コード:utf8
sendmessage_smtp_php.sh内の
class PHPMailer_JP extends PHPMailer {
public $CharSet = "iso-2022-jp";
public $Encoding = '7bit';
}
これだけでOKかと思っていたんですが、うまくいきませんでした。
メールのソース見ましたが
Subject: [infra:6705] =?ISO-2022-JPxxxxxx
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="iso-2022-jp"
となっていました