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

はじめに

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

環境

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

手順

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

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

$ sudo apt-get install 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

SPONSORED LINK

この投稿へのコメント

  1. にしにし! said on 2016年6月20日 at 15:20

    /etc/postfix/main.cfの記述内容が
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    なので,

    ” Gmailのアカウント情報をファイルに記述 ” 以下のメールアカウント情報を記述するファイルは,
    sasl_passwordではなくてsasl_passwdになると思います.

    sudo vi /etc/postfix/sasl_passwd
    sudo chown root:root /etc/postfix/sasl_passwd
    sudo chmod 600 /etc/postfix/sasl_passwd
    sudo postmap /etc/postfix/sasl_passwd

    • virment said on 2018年6月10日 at 15:19

      ご指摘ありがとうございます。修正しました。

  2. 匿名 said on 2017年4月9日 at 14:30

    ✖:smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    〇:smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    ですね。
    おかげさまでうまくいきました。有難うございました。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

  1. […] rsyncの実行結果が正常終了でなかった場合の処理です。この場合はLOGの内容とcodeの内容をメールで$MAILADDに送信しています。「mail」コマンドによるメールの送信については、こちらにまとめましたので必要な方は参考にして頂ければと思います。 […]

トラックバック URL