bash で、シェルスクリプトからメールを送る方法

bash では、様々なコマンドを`(バッククオーテーション)で囲むと、そのコマンドを変数に入れたりすることができる。つまり、何か処理を始めたり終わったことをメールで通知する場合は次のようにする。

#!/bin/bash

echo 'Subject: Started: your_program'   >  temp.txt
echo 'To: yourname@yourdomain.com'      >> temp.txt
echo 'Started.'                         >> temp.txt
cat  temp.txt                           | `sendmail -t -i`
rm temp.txt

your_program (←ここに処理したいプログラム名(時間がかかるもの)を書く)

echo 'Subject: Completed: your_program' >  temp.txt
echo 'To: yourname@yourdomain.com'      >> temp.txt
echo 'Completed.'                       >> temp.txt
cat temp.txt                            | `sendmail -t -i`
rm  temp.txt

大事なのは
cat temp.txt | `sendmail -t -i`

としている部分で、ここでは temp.txt という名前のファイルの内容を、sendmail にパイプ(|)で渡してメールしている。

sendmail のオプションは、

  • -t…To:、Cc:、Bcc: フィールドをメッセージ中に書くと、受信者のアドレスとして読み込まれる。Bcc: フィールドはメッセージの転送前に 削除される。
  • -i…入力されるメッセージ中の `.' だけを含む行を無視。 このフラグは、データをファイルから読み込むような場合に使用する必要がある。
トラックバック URL: https://perltips.twinkle.cc/trackback/330