ラズパイ起動後にIPをメールで自動送信


ラズパイ起動後にIPをメールで送信

最初はGmailでやろうと思ったんですけど、セキュリティ的に弾かれたので別の方法にしました。

また、ここではメールの送信サーバをインストールしてやってますが、めんどくさかったので、送信専用のウェブページ作って、そこをpythonで自動的に送信させよう。(どっちがめんどくさいかは考えない)
http://raspi.seesaa.net/article/421958492.html

実際は下記になります。

流れ

  1. 送信用メールフォームのあるwebページを作る
  2. そのページからメールを送るようなpythonプログラムを作る
  3. ラズパイからそのプログラムを自動で実行するよう設定する

メール送信するページ作成

どこかで作ったやつをそのまま持ってきました。

index.html
<html>
<body>
    <form id="campaign" name="campaign" action="confirm.php" type="post" method="post">
        <p><input type="text" name="ip" id="ip"/></p>
        <input type="submit" value="SUBMIT" />
    </form>
</body>
</html>

confirm.php

<?php
    mb_language("Japanese");
    mb_internal_encoding("UTF-8");
    $to      = 'メールアドレス';
    $subject = 'Raspberrypi IP address';
    $ip=htmlspecialchars($_POST["ip"]);
    $message = $ip;
    $headers = 'From:'. $email . "\r\n";
    mb_send_mail($to, $subject, $message, $headers);
?>

ここのURLをhttp://autosendmail.com とします

ラズパイの自動化設定

/home/pi/lxsession/LXDE-pi/autostart
上記ファイルの一番下にこれを追加(ラズパイのOSによって異なると思うので、適宜ググってください。)
@python /パス/autosend.py

ちなみにautosend.pyの中身。

autosend.py
import netifaces
import mechanize

myip = []

def detectip():
    for iface_name in netifaces.interfaces():
        iface_data = netifaces.ifaddresses(iface_name)
        ip_adressList = iface_data.get(netifaces.AF_INET)
        if ip_adressList != None:
            ip_address = ip_adressList[0]['addr']
            myip.append(ip_address)
    return myip

def sendmail():
    br = mechanize.Browser()
    br.open("http://autosendmail.com")
    br.select_form(nr=0)
    br["ip"] = str(detectip())
    br.submit()

if __name__ == "__main__":
    sendmail()

結果

少し余計なものも来てますが、十分ですのでこのままいく!

以上です。