シュンカの日記

基本的に書きたいことを書いていくスタイル。

sSMTPを使ってラズパイからメール送信する手順 ~グローバルIPの変更を自動メール通知~

【スポンサーリンク】

ラズパイ3を使って自宅サーバーを立てました。

しかし、ルーターのグローバルIPアドレスが動的に割り当てられてしまい、まれに変わります。

さらに、

  • さらに、ラズパイではDice(グローバルIP変更時にDDNSに自動で登録してくれるサービス)が使えない模様
  • 僕が使ってるルーターはグローバルIPの固定サービスがない

という事情もあり、
グルーバルIPアドレスが変更した際、sSMTPを利用してメールで自動通知するようにしました。

その手順を書いていきます。

sSMTPとは?

SSMTP はローカルコンピュータから設定したメールホスト (メールハブ) にメールを配達するプログラムです。(sendmail などのような機能豊富なメールサーバーと違って) メールサーバーではないのでメールを受信したり、エイリアスを展開したりキューを管理することはできません。SSMTP は主としてマシンから (システムアラートのような) 自動メールを外部のメールアドレスに飛ばすのに使われます。

引用:SSMTP - ArchWiki

1からメールサーバーを立てなくても、外部のメールサービスをハブとして利用することで、サーバーからメール送信できる仕組みと理解しました。

こんな感じかな。
f:id:nukano0522:20170725074504p:plain

ハブ用Gmailアカウントの取得

まずはハブ用のGmailアカウントを作成します。

既存のアカウントでも問題ないですが、sSMTPの設定ファイルにユーザーIDとパスワードを直に打ち込むので、ハブ用に用意することにしました。

サーバー側(ラズパイ側)にsSMTPをインストール

サーバー側(ラズパイ側)にて、sSMTPをインストールします。

$sudo apt-get install ssmtp

メール送信には"mail"コマンドを利用するので、mailutilsをインストールします。

$sudo apt-get install mailutils

次に、ssmtp.confの設定をします。

$ vim /etc/ssmtp/ssmtp.conf #ssmtp.confを編集

root=xxxx@gmail.com #用意したハブ用メールアドレス
mailhub=smtp.gmail.com:587
hostname=raspberrypi #サーバーのホスト名。任意の名前で良いみたい
AuthUser=xxxx #ハブ用メールアドレスのユーザーID
AuthPass=pppp #ハブ用メールアドレスのパスワード
UseSTARTTLS=YES


設定が終わったら、メールを送信できるか手動で確認してみましょう。

$ mail -s "test" shunka3141592@gmail.com

シェルスクリプトの作成

こちらのサイトを参考にさせていただきました。
グローバルIPの変更を自宅サーバからメールで通知する | Linuxサーバより愛を込めて。

ipcheck.shという名前でスクリプトを作成します。

newip=`curl -sS inet-ip.info` #「inet-jp.info」は、現在のグローバルIPを確認できるサービス
oldip=`cat /path/old_ip.txt` # 前回確認時のIPを取得
if [ $oldip != $newip ] #前回のIPと現在のIPを比較して異なる場合はメールを送信
then
echo "$newip" > /path/old_ip.txt # 現在のIPアドレスを保持しておく
mail -s "Change IP Address!!!" shunka3141592@gmail.com < /path/old_ip.txt
fi

シェルスクリプトを作成したら、手動で動かしてみましょう。

$ bash ipcheck.sh

送信先アドレス(shunka3141592@gmail.com)にメールが届いていたらOKです。

Cronの設定

メールは自動で送信したいので、先程のシェルスクリプトをCronに登録します。
下記を実行すると、Cronの設定画面に切り替わるので、

crontab -u ユーザー名 -e

下記を追加します。

# ipアドレスのチェック
 */15 * * * * /path/ipcheck.sh 1>/var/log/ipcheck.log 2>&1
  • 「*/15」は「15分毎に実行」を意味します。
  • エラーログをipcheck.logに吐き出すようにしています。

cronの設定の仕方については、下記にまとめられています。
cron の設定ガイド



以上でした。