日本語メールの送信ができない
こんにちは。いつもお世話になっております。
先月号のソフトウェアデザインとこのサイトのDOCUMENTSを見て、
日本語メールの送信を試みましたが、送信できませんでした。
サーバからメールは遅れるのでsendmail周辺の障害ではないと思うのですが。
尚、カスタムスクリプトではない、通常のe-mailメッセージだと、送信できています。
どうか切り分け方法お教え下さい。
【やったこと】
1.スクリプトファイルのダウンロードと設置
# mkdir /var/lib/zabbix
# gzip -d /var/lib/zabbix/sendmessage_perl.sh.gz
# chmod 755 /var/lib/zabbix/sendmessage_perl.sh
2.Webフロントエンドの言語設定を変更
3.カスタムスクリプトの登録
4.ユーザのMedia設定に登録
5.アクションの設定
KAZ - 投稿数: 1085
bird様
zabbixのバージョンは何を使用されていますか?
また、perlは実行可能でしょうか?
phpでの実行は試されましたか?
bird - 投稿数: 21
KAZ様
基本情報抜けていて失礼しました。
zabbixのバージョン:1.6
perl:実行可能
phpでも試しましたが、結果は同じでした。
kodai - 投稿数: 1341
こんにちは。
以下のように引数をつけてシェルから直接sendmessage_XXX.shを実行するとどうなるでしょう?
<code># sendmessage_XXX.sh <送付先メールアドレス> <メール件名> <メール本文></code>
上記で送信できないようであれば、ZABBIXからも送信することはできません。
bird - 投稿数: 21
>kodai様
返信遅くなってすみません。
>引数をつけてシェルから直接sendmessage_XXX.shを実行すると
ご指摘の方法では送信できました。
その後分かったことですが、
テンプレートによってメール送信されるものがあります。
(通常のe-mail送信はテンプレートに関係なく可能です。)
具体的には、
・シンプルチェックでping監視ものはメール送信×
・シンプルチェックでポート監視ものはメール送信○
でした。
また、ポート監視ものについてはメール送信は可能でしたが、
肝心なメール内容については、
・日本語化できていない
・serialやlocationといった内容が、*unknown*と表示されています
厚かましくてすみませんが、何か対処策ないでしょうか?
1.6.1だったら直ってたりするんでしょうか・・・
bird - 投稿数: 21
テンプレートを一回削除し同じものを作成したところ、
無事日本語メールが送信できました。
ところが、serialやlocationといった内容は、
以前と同じく*unknown*と表示されています。
この部分はそもそも外部スクリプトでの読み出しに対応していない、
要は仕様ということでしょうか?
お手数お掛け致しますが、よろしくお願いします。
kodai - 投稿数: 1341
serialやlocationの内容というのは、具体的にどこのことを指しているでしょうか?
アクションのオペレーションの設定や、日本語メール送信のスクリプトを変更されている場合はその内容、期待しているメールの内容などをもう少し詳細に教えていただけるでしょうか。
bird - 投稿数: 21
kodaiさん
説明が色々と抜けていて申し訳ありません。
以下に記述いたします。
1.serialやlocationの内容
「Configuration」-「Hosts」-「(監視対象名)」-「Use profile」にチェックすると、SerialNoやlocationがありました。
そこに、日本語でデータ入力し保存してあります。
⇒ここの文字列はメールでは??というようになってしまいます。
2.アクションのオペレーションの設定
・Action conditions↓
Trigger severity = "Disaster"
⇒icmpping失敗時にstatusがDisasterになるようにしています。
・Action operations
「Edit operation」内の「Subject」「Message」に、日本語で文字を入力してあります。
その部分の日本語もまた、メールでは??のような文字列になってしまいます。
3.日本語メール送信のスクリプト
特に変更しておりません。
4.その他情報
・「Triggers」の「Name」で指定した日本語は無事送信できています。
・日本語メール送信のスクリプトにスクリプトを追記し、「Subject」「Message」をファイルに出力してみたところ、
日本語部分は同じく??と表示されていました。
完全にどん詰まり状況です・・。よろしくお願いいたします。
kodai - 投稿数: 1341
なるほど...。状況は理解できました。こちらでも一度試してみようと思います。
他に関係しそうな点としては、データベースの言語設定でしょうか。利用されているデータベースと、その言語設定を教えていただけるでしょうか。
bird - 投稿数: 21
kodaiさん
データベースの言語設定について指摘頂き本当にありがとうございます。
タイトル部分は未だ???という表記となっておりますが、本文の日本語化に成功しました。
【原因と対処】
データベースはMySQL5.0を利用しています。文字コードはデフォルトのままでした。
そのためzabbix関連のテーブル文字コードはlatin1_swedish_ciとなってしまい、結果として???となってしまっていたようです。
この文字コード設定を以下のページを参考に、フィールドの文字コードをすべてutf8にしたところ、メール本文が日本語で表示されるようになりました。
http://perltips.twinkle.cc/mysql/convert_latin1_swedish_ci_utf8.php
【ところが・・・】
メールタイトルは相変わらず???のままです。
メール変換スクリプトのperl版/php版も試しましたが、状況は変わらず・・。
もしここら辺がおかしいんじゃないかというところありましたら、お知恵をお貸しください。
何度も厚かましくて申し訳ありません。
kodai - 投稿数: 1341
返信がおそくなりました。
データベースに保存されているデータに、複数のエンコードが混在してしまっているかもしれません。メール送信時に文字化けしてしまう箇所の設定を再度設定しなおしてもうまくいかないでしょうか。
ZABBIX-JPで配布している日本語メール送信スクリプトは、保存データがUTF-8であることを前提としていますので、MySQLの設定などでそれ以外のエンコードが渡されてしまうと文字化けしてしまいます。
場合によっては一度データベースをdumpして、文字コードをUTF-8に変換してから再度インポートしなおした方が良いと思います。その際、強制的にUTF-8を使うようにMySQLデータベースの設定に以下を追加しておくと文字コード関係で問題が起きにくくなると思います。
<code>[mysqld]
default-character-set=utf8
skip-character-set-client-handshake</code>
bird - 投稿数: 21
kodaiさん
色々とありがとうございました。
再設定等行いましたがうまく行きませんでした。
0から作り直すことも視野に検討中です。
暫定対処として、日本語文字をISO-2022-JP形式に変換し、
変換後の文字列を、そのままAction operationsのsubject部に、
記述することで対処しました。
kodai - 投稿数: 1341
環境によって、日本語メール送信スクリプトがうまく動作していないのかもしれません。先日以下のフォーラムに投稿があったメール送信スクリプトを利用されてみてはどうでしょうか?
http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=215&forum=6
satiger - 投稿数: 2
1.6.2 および 1.6.4 を評価しております。
CentOS 5.2 (32bit) では sendmessage_perl.sh などで問題なく件名も本文も日本語で送信できました。
しかし、CentOS 5.2 (64bit) では、上記でご紹介いただいたものを含め、日本語の件名は処理できませんでした。(空白や文字化け)
kodai - 投稿数: 1341
ご報告どうもありがとうございます。こちらでも試してみます。
satiger - 投稿数: 2
さらに検証をしていたところ、
> skip-character-set-client-handshake
を[mysqld]に追加し、
> default-character-set=utf8
を全項目に追加。
念のため
> default-character-set=utf8
> character-set-server=utf8
> collation-server=utf8_general_ci
> init-connect=SET NAMES utf8
も[mysqld]に追加して、
> create database zabbix default character set utf8 collate utf8_general_ci
としてデータベースを再作成してインポートしなおしたところ、件名だけが文字化けするという現象が x86_64 環境でも解消されました。
どれが影響していたのかは不明ですが、64bit環境でも問題なくアラートメールが日本語で利用できそうです。
以上、ご報告いたします。
KAZ - 投稿数: 1085
satigerさん、kodaiさん
KAZです。
私の環境はmysqlのconfigure時に「--with-charset=utf8」オプションを指定するだけで上手く言ってますので「default-character-set=utf8」が関係してる様に思えます。
fripper - 投稿数: 495
フォロー遅くなってしまいました
当方の環境では、mysql はオフィシャル配布のバイナリ
mysql-5.0.51a-linux-i686-glibc23.tar.gz
mysql-5.0.67-linux-i686-glibc23.tar.gz
mysql-5.1.31-linux-i686-glibc23.tar.gz
mysql-5.1.33-linux-i686-glibc23.tar.gz
のいずれかを利用しております
satiger 様のコメントにあるとおり、mysql 関連、
my.cnf には以下のような言語まわりの設定が入れてあります
先日、ソースコードを公開した際には、ここまで関連するとは
思ってもおりませんでした
satiger 様、追加検証ありがとうございました
<code>
[client]
default-character-set = utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake
language = japanese
</code>