シェルスクリプトからGmailのSMTPサーバを経由してメールを送る
自宅サーバを立てていると、イベントごとにサーバからメールを送りたくなることが多々ある(ルータのIPが変わるなど)こういう場合は、ローカルのSMTPサーバを使ってメールを送るのが常套手段らしいのだけど、昨今は俺俺SMTPサーバに優しくない世の中であり、かつ自前SMTPサーバを使っていると、メールの管理がややこしくなるのでGmailのアドレスからメールを送れるようにしてみたいと思った。
が、意外とやってる人がいなかった…。いや、Gmailをコマンドラインから使うというのをやってる人はいるのだけど、スクリプトから自動で、っていう人は簡単には見つからなかった。なのでやってみた。
環境はDebian/SH4で、結果的にmsmtp+mailxで実現できた。以下は詳細。
とりあえずインストール。
# aptitude install msmtp mailx
次に設定ファイル。
.msmtprc
account default host smtp.gmail.com port 587 user ユーザー@gmail.com password パスワード from ユーザー@gmail.com tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt auth on logfile .msmtp.log
.mailrc
set sendmail="/usr/bin/msmtp"
設定はこれだけ。あとはシェルスクリプトから、
echo 本文 | mail -v -s "サブジェクト" 送り先メールアドレス
とすると送ることができる。odawaraの使い方は、IPアドレスを見て、変わっていたらメールを送るというスクリプト。MyDNS.jpを使っているのだけど、下みたいな感じにしている。エラー処理は甘い。
#!/bin/sh ADDR_OLD="REMOTE_ADDR = 0.0.0.0" echo $ADDR_OLD while [ 1 ] do USER="ユーザID" PASS="パスワード" echo "Check MyDNS a-odawara.com" wget -o /dev/null -O ./MyDNS.log http://$USER:$PASS@www.mydns.jp/login.html ADDR_NOW=`cat ./MyDNS.log | grep REMOTE_ADDR` echo $ADDR_NOW if [ "$ADDR_OLD" = "$ADDR_NOW" ]; then echo "No change IP address" else echo "Change IP address" echo $ADDR_NOW | mail -v -s "Change IP adddress" 送り先メールアドレス ADDR_OLD=$ADDR_NOW fi sleep 適当にスリープ done
送り先メールアドレスをケータイにしているんだけど、たぶん便利(これを作ってからIP変わってない…)
参考ページはいろいろあるんだけど、これというものはない。
2007-10-28
2008-03-01
msmtp 1.8.3http://linuxコマンド.com/01linux/028mail.html
最後にbashの参考ページ。
http://www.silver-shell.com/info/index.php?%A5%B7%A5%A7%A5%EB%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%A4%CE%CD%EE%A4%C8%A4%B7%B7%EA%20-bash%CA%D4-