日本語メールの送信ができない

こんにちは。いつもお世話になっております。

先月号のソフトウェアデザインとこのサイトの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 の写真

bird様

zabbixのバージョンは何を使用されていますか?
また、perlは実行可能でしょうか?

phpでの実行は試されましたか?

ユーザー bird の写真

KAZ様

基本情報抜けていて失礼しました。

zabbixのバージョン:1.6
perl:実行可能

phpでも試しましたが、結果は同じでした。

ユーザー kodai の写真

こんにちは。

以下のように引数をつけてシェルから直接sendmessage_XXX.shを実行するとどうなるでしょう?

<code># sendmessage_XXX.sh <送付先メールアドレス> <メール件名> <メール本文></code>

上記で送信できないようであれば、ZABBIXからも送信することはできません。

ユーザー bird の写真

>kodai様

返信遅くなってすみません。

>引数をつけてシェルから直接sendmessage_XXX.shを実行すると
ご指摘の方法では送信できました。

その後分かったことですが、
テンプレートによってメール送信されるものがあります。
(通常のe-mail送信はテンプレートに関係なく可能です。)
具体的には、
・シンプルチェックでping監視ものはメール送信×
・シンプルチェックでポート監視ものはメール送信○
でした。

また、ポート監視ものについてはメール送信は可能でしたが、
肝心なメール内容については、
・日本語化できていない
・serialやlocationといった内容が、*unknown*と表示されています

厚かましくてすみませんが、何か対処策ないでしょうか?
1.6.1だったら直ってたりするんでしょうか・・・

ユーザー bird の写真

テンプレートを一回削除し同じものを作成したところ、
無事日本語メールが送信できました。

ところが、serialやlocationといった内容は、
以前と同じく*unknown*と表示されています。

この部分はそもそも外部スクリプトでの読み出しに対応していない、
要は仕様ということでしょうか?

お手数お掛け致しますが、よろしくお願いします。

ユーザー kodai の写真

serialやlocationの内容というのは、具体的にどこのことを指しているでしょうか?

アクションのオペレーションの設定や、日本語メール送信のスクリプトを変更されている場合はその内容、期待しているメールの内容などをもう少し詳細に教えていただけるでしょうか。

ユーザー bird の写真

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 の写真

なるほど...。状況は理解できました。こちらでも一度試してみようと思います。

他に関係しそうな点としては、データベースの言語設定でしょうか。利用されているデータベースと、その言語設定を教えていただけるでしょうか。

ユーザー bird の写真

kodaiさん

データベースの言語設定について指摘頂き本当にありがとうございます。
タイトル部分は未だ???という表記となっておりますが、本文の日本語化に成功しました。

【原因と対処】
データベースはMySQL5.0を利用しています。文字コードはデフォルトのままでした。
そのためzabbix関連のテーブル文字コードはlatin1_swedish_ciとなってしまい、結果として???となってしまっていたようです。

この文字コード設定を以下のページを参考に、フィールドの文字コードをすべてutf8にしたところ、メール本文が日本語で表示されるようになりました。
http://perltips.twinkle.cc/mysql/convert_latin1_swedish_ci_utf8.php

【ところが・・・】
メールタイトルは相変わらず???のままです。
メール変換スクリプトのperl版/php版も試しましたが、状況は変わらず・・。

もしここら辺がおかしいんじゃないかというところありましたら、お知恵をお貸しください。
何度も厚かましくて申し訳ありません。

ユーザー kodai の写真

返信がおそくなりました。

データベースに保存されているデータに、複数のエンコードが混在してしまっているかもしれません。メール送信時に文字化けしてしまう箇所の設定を再度設定しなおしてもうまくいかないでしょうか。

ZABBIX-JPで配布している日本語メール送信スクリプトは、保存データがUTF-8であることを前提としていますので、MySQLの設定などでそれ以外のエンコードが渡されてしまうと文字化けしてしまいます。

場合によっては一度データベースをdumpして、文字コードをUTF-8に変換してから再度インポートしなおした方が良いと思います。その際、強制的にUTF-8を使うようにMySQLデータベースの設定に以下を追加しておくと文字コード関係で問題が起きにくくなると思います。

<code>[mysqld]
default-character-set=utf8
skip-character-set-client-handshake</code>

ユーザー bird の写真

kodaiさん

色々とありがとうございました。

再設定等行いましたがうまく行きませんでした。
0から作り直すことも視野に検討中です。

暫定対処として、日本語文字をISO-2022-JP形式に変換し、
変換後の文字列を、そのままAction operationsのsubject部に、
記述することで対処しました。

ユーザー kodai の写真

環境によって、日本語メール送信スクリプトがうまく動作していないのかもしれません。先日以下のフォーラムに投稿があったメール送信スクリプトを利用されてみてはどうでしょうか?

http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=215&forum=6

ユーザー satiger の写真

1.6.2 および 1.6.4 を評価しております。

CentOS 5.2 (32bit) では sendmessage_perl.sh などで問題なく件名も本文も日本語で送信できました。
しかし、CentOS 5.2 (64bit) では、上記でご紹介いただいたものを含め、日本語の件名は処理できませんでした。(空白や文字化け)

ユーザー kodai の写真

ご報告どうもありがとうございます。こちらでも試してみます。

ユーザー satiger の写真

さらに検証をしていたところ、

> 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 の写真

satigerさん、kodaiさん

KAZです。

私の環境はmysqlのconfigure時に「--with-charset=utf8」オプションを指定するだけで上手く言ってますので「default-character-set=utf8」が関係してる様に思えます。

ユーザー fripper の写真

フォロー遅くなってしまいました

当方の環境では、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>