日本語メール、題名が文字化け

ふりっぱぁです

ZABBIX-JPにて配布されているスクリプトでは、php の
mb_send_mail 関数の仕様・制限上、題名に日本語文字を
利用した場合等、一部のメールクライアントで文字化けが
発生することがあるかと思います

mail 関数を用い、適切にエンコードして処理することで
この問題を回避できるかと思い、コーディングしてみました

いかがでしょうか?

-----
想定環境:Linux (RedHat Enterprise 3/4/5 ES)
システムロケール:EUC-JP
データベースの内部ロケール:UTF-8
-----

-- sendmessage.sh
<code>#!/bin/bash
#
# 指定内容のメッセージを送信するスクリプト
#
# Usage:
# <this_script> [toaddr] [subject] [message]
# example:
# # ./sendmessage.sh nobody@example.net 'Test mail' 'This is test mail.'
#
#-----------------------------------------------------------
PROGPATH=$(cd $(/usr/bin/dirname $0);/bin/pwd)

php ${PROGPATH}/sendmessage.php "${1}" "${2}" "${3}" `hostname 2>/dev/null` 2>/dev/null
#-----------------------------------------------------------

# end of file
</code>

-- sendmessage.php
<code><?php
// 事前に現在のシステム設定を保存
$org_mb_language = mb_language();
$org_mb_internal_encoding = mb_internal_encoding();
$org_mb_detect_order = mb_detect_order();

// システム設定を送信内容に合わせて設定
mb_language('Japanese');
mb_internal_encoding('EUC-JP');
mb_detect_order('JIS, UTF-8, EUC-JP');

$MAIL_TO = $argv[1];
$MAIL_SUBJECT = $argv[2];
$MAIL_MESSAGE = $argv[3];
$MAIL_FROM = 'zabbix@' . $argv[4];

// 適切なヘッダ情報を生成
$MAIL_HEADER = 'MIME-Version: 1.0' . "\r\n";
$MAIL_HEADER .= 'Content-Type: text/plain; charset="iso-2022-jp"' . "\r\n";
$MAIL_HEADER .= 'Content-Transfer-Encoding: 7bit' . "\r\n";
$MAIL_HEADER .= 'Date: ' . date('r') . "\r\n";
$MAIL_HEADER .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$MAIL_HEADER .= 'From: ' . $MAIL_FROM . "\r\n";

// 題名・本文の文字エンコードを適切に変換
$MAIL_SUBJECT = mb_convert_encoding($MAIL_SUBJECT, 'JIS', 'UTF-8');
$MAIL_MESSAGE = mb_convert_encoding($MAIL_MESSAGE, 'JIS', 'UTF-8');

// 題名を Base64 エンコード
$MAIL_SUBJECT = '=?ISO-2022-JP?B?' . base64_encode($MAIL_SUBJECT) . '?=';

// 送信
mail($MAIL_TO, $MAIL_SUBJECT, $MAIL_MESSAGE, $MAIL_HEADER);

// 保存してあったシステム設定を復帰
mb_language($org_mb_language);
mb_internal_encoding($org_mb_internal_encoding);
mb_detect_order($org_mb_detect_order);
?>
</code>

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー kodai の写真

ありがとうございます!ぜひ利用させて頂ければと思います。

ユーザー dsol_seki の写真

日本語アラートメールの送信方法からスクリプトをダウンロードいたしましたが解凍ができません。

解凍すると下記のようなエラーが出力します。
#gzip -d sendmessage_php.sh.gz

#gzip: sendmessage_php.sh.gz: not in gzip format

何がいけないのでしょうか。
何卒宜しくお願いいたします。

ユーザー kodai の写真

こんにちは。

ダウンロードが正常に行えていない可能性があると思います。再ダウンロードしてみて頂けないでしょうか?

後ほどダウンロードページにmd5値を記載しておくようにします。