logwatchからのメール文字化け対応

CentOS 5.x の logwatch からのメールに日本語が含まれている場合に、content-type が決め打ちなのでメーラーで文字化けする件の対応。

syslog などが UTF-8 な前提で、logwatch は以下のバージョンです。

# logwatch --version
Logwatch 7.3 (released 03/24/06)
# rpm -q logwatch
logwatch-7.3-6.el5

まず、/usr/sbin/logwatch は /usr/share/logwatch/scripts/logwatch.pl にシンボリックリンクされているので、
編集対象は logwatch.pl です。
以下にパッチ。
iso-8859-1utf-8 にしただけです。

# diff -wc logwatch.pl.orig logwatch.pl

*** logwatch.pl.orig    2008-05-25 01:42:04.000000000 +0900
--- logwatch.pl 2009-05-29 00:25:35.000000000 +0900
***************
*** 1019,1027 ****
  $out_mime .= "Content-Transfer-Encoding: 7bit\n";
  }
  if ( $outtype_html ) {
!             $out_mime .= "Content-Type: text/html; charset=\"iso-8859-1\"\n\n";
  } else {
!             $out_mime .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n\n";
  }
  if (($Config{'splithosts'} eq 1) && ($Config{'multiemail'} eq 0)) {
--- 1019,1027 ----
  $out_mime .= "Content-Transfer-Encoding: 7bit\n";
  }
  if ( $outtype_html ) {
!             $out_mime .= "Content-Type: text/html; charset=\"utf-8\"\n\n";
  } else {
!             $out_mime .= "Content-Type: text/plain; charset=\"utf-8\"\n\n";
  }
  if (($Config{'splithosts'} eq 1) && ($Config{'multiemail'} eq 0)) {
#

実際にはこれで動くが本当は Content-Transfer-Encoding: 7bit も嘘なので base64 にするか quoted-printable にして、本文もそれに対応さる必要があることは SE としては認識しておかなければならない。

仕事ではちゃんとすること!