mailコマンドでファイルを添付して送る2008年09月25日 11時10分

毎日、PostfixやBindのログの前日との差分を、Linux(Fedora9)サーバから管理者クライアント(Windows)にメールを送信し確認している。その際のスクリプトは、メールログの場合、

diff /var/log/mail/maillog /var/log/mail/maillog_b | mail -s "maillog" root (前日のメールログ「maillog_b」と今現在のメールログ「maillog」の差分を管理者にメールする)

cp /var/log/mail/maillog /var/log/mail/maillog_b (現在のメールログ「maillog」をバックアップ「maillog_b」に保存する)

と言った感じで、一日一回crontabで行っている。

・・・

しかしこのスクリプトでメールを送ると、ログはメールの本文に書かれる。確認するだけならこれでよいが、メールをログのバックアップとしても使用しているため、いちいちテキストファイルにメールの本文を出力するのが面倒になってきた。何とか初めからログをテキストファイルとしてメールに添付することはできないか?

・・・

ネットで調べてみると可能っぽい。順を追ってやってみる。(とりあえず差分ではなく全部)

1.エンコードできる環境を作る。

まずは送るテキストをエンコードする必要があるらしい。そのためには「uuencode」というコマンドを使う。しかしFedora9で「which uuencode」と入力してみても、自分の環境にはインストールされていなかった。ということでyumでインストール。

yum install sharutils.i386

無事インストールされた。

2.エンコードし、できたファイルを添付してメール送信。

uuencode エンコードするファイル 添付ファイル名 | mail -s "件名"  送信先アドレス

と言う形式で添付ファイルが送れるらしい。今回は、

uuencode /var/log/mail/maillog maillog.txt | mail -s "maillog" root

としてみる。

・・・

管理者クライアント(Windows)でメールを受信してみた。すると何故かファイルが添付されず、メールの本文にエンコードされたものが記述されてしまっていた。しばらく原因が分からなかったが、どうやらメーラーの問題らしい。自分はEdMaxというメーラーを使用しているが、デフォルトのuuencodeの扱いのままではダメらしい。EdMaxで、

設定(s)→メーラー設定(M)→受信タブ→「本文中のuuencodeデータの扱い」に2箇所チェックを入れる。

これでちゃんと添付ファイルとして受信できるようになった。ちなみにWindowsメールではデフォルトの設定のままで添付ファイルとして受信できた。

・・・

添付ファイルをメモ帳で開いてみると、ログが一切改行されず、全て1行になっており非常に見づらい。これは改行コードの問題だろう。これは、IEやFirefoxなどのブラウザ、またはWord,Excelなどで開けばちゃんと適切なところで改行されており見やすくなる。