Linuxでログの内容をGmailにメールを送信する

公開日:2014/05/25 更新日:2014/05/25
Linuxでログの内容をGmailにメールを送信するのサムネイル

はじめに

Linuxでサーバを立ててログをとっている場合、そのログの内容を指定したアドレスにメールで送信したいということがあると思います。私はrsyncで自動バックアップを取る環境を構築するときに必要となりました。そこで、ログ内容をメール送信する方法を調べたので、その方法と手順をメモします。

環境

サーバ:Ubuntu Server 13.04 64bit メールの送信先:Gmail (プロトコルはsmtpでポート番号は587番)

手順

mailコマンド関連をインストール

まずはじめにubuntuでコマンドによるメール送信を可能とするために、mailコマンドを使用します。mailコマンドがインストールされていない場合は、以下のコマンドでインストールします。

$ sudo apt-get insbashtall mailutils
$ sudo apt-get install sasl2-bin

/etc/postfix/main.cfを修正

Gmail宛にメールを送信できるようにするために、いくつかの情報を /etc/postfix にある main.cf というファイルを修正、情報を追記します。そのためにviエディタを使ってmain.cfを開きます。

$ sudo vi /etc/postfix/main.cf

開いたら以下に関する項目を修正します。

relayhostにGmailのsmtpサーバを指定

relayhost = [smtp.gmail.com]:587

saslとtlsの設定

#sasl setting
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain

#tls setting
smtp_use_tls = yes

Gmailのアカウント情報をファイルに記述

Gmailにメールを送信するために自分が持っているメールアカウントの情報を sasl_passwd というファイルを作成し、その中に記述しておきます。

$ sudo vi /etc/postfix/sasl_passwd

sasl_passwdの中には以下の1行を記述します。

[smtp.gmail.com]:587 virtualimenttest@gmail.com:password

「virtualimenttest」はGmailアカウントのユーザ名、「password」はGmailアカウントのパスワードになります。

また、パスワードが記述された sasl_passwd の権限を変更しておきます。

$ sudo chown root:root /etc/postfix/sasl_passwd
$ sudo chmod 600 /etc/postfix/sasl_passwd

あとは sasl_passwd を以下のpostmapコマンドで読み込んで、postfixを再起動します。

$ sudo postmap /etc/postfix/sasl_passwd
$ sudo service postfix restart

以上でubuntuからmailコマンドを使用してGmailにメールを送信できるようになったはずです。

使ってみる

そして以下のようにcatコマンドとパイプを使って、ログファイルの内容を本文としたメールを指定したアドレスに送信します。

$ cat hoge.log | mail -s "testlog" virtualimenttest@gmail.com 

なお、-sオプションは、件名指定のオプションであり -s の後に続く「testlog」が件名となります。 また、以下のコマンドを実行することで、メールが送信できたかどうかを確認できます。

mailq

メール送信に成功して、キューにメールが溜まっていない場合は、mailqの実行結果として以下が出力されます。

Mail queue is empty

逆に失敗してメールがキューに溜まっている場合は、以下のような結果が出力されます。

ubuntuserver@ubuntu:~/backup$ mailq
-Queue ID-    --Size-- ----Arrival Time---- -Sender/Recipient-------
133A323sas   1907    Tue Apr  8 20:36:18  ubuntuserver@ubuntu
                                             virtualimenttest@gmail.com
-- 2 Kbytes in 1 Request.

溜まっているメールを削除するには、以下のようにpostsuperコマンドとdオプションを使って上記の出力結果にあるQueue IDを指定して削除したり、

sudo postsuper -d 133A323sas

以下のように溜まっているメールすべてを一括で削除することもできます。

sudo postsuper -d ALL

まとめ

ubuntuでログ内容をメール送信できるようになりましたが、mailコマンドを端末上で実行して使うことはあんまりないかと思います。実際には、cronに登録して定期的にメールを送信するような使い方になると思います。そしてcronやシェルスクリプトと組み合わせて使う場合は多いので役に立つと思います。

参考サイト様

以下のサイトが大変参考になりました。ありがとうございました。

Ubuntu 9.04 Server – Postfixの設定 | icoro

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。