2010年7月6日火曜日

PythonでグローバルアドレスをGmailに送る(改良版)

Check
前回の改良版。my_ipというファイルに前回取得時のIPを保存しておき、現在取得したIPとの差分をみるように変更。IPが変わっていたときだけ、メールで通知するようになった。

sendIP.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Load IP from file
def load_ip(filename):
    f = open(filename, 'r')
    ip = f.readline()
    return ip

# Save IP
def save_ip(filename, ip):
    f = open(filename, 'w')
    f.write(ip)

# Get global IP.
import urllib2
def get_ip():
    ip = urllib2.urlopen('http://ipcheck.ieserver.net').read()
    return ip

# Send IP by e-mail.
import smtplib
from email.MIMEText import MIMEText

def create_message(from_addr, to_addr, subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = from_addr
    msg['To'] = to_addr
    return msg

def send_via_gmail(gmail_id, gmail_pw, msg):
    s = smtplib.SMTP('smtp.gmail.com', 587)
    s.ehlo()
    s.starttls()
    s.ehlo()
    s.login(gmail_id, gmail_pw)
    s.sendmail(msg['From'], msg['To'], msg.as_string())
    s.close()

if __name__ == '__main__':
    from_addr = 'hoge@gmail.com'
    to_addr = 'piyo@gmail.com'
    gmail_id = 'fuga@gmail.com'
    gmail_pw = 'password'
    ip_file = 'my_ip'

    cur_ip = get_ip()
    old_ip = load_ip(ip_file)

    print cur_ip
    print old_ip
    
    if cur_ip != old_ip:
        body = 'IP has changed! ' + old_ip + ' --> '+ cur_ip
        msg = create_message(from_addr, to_addr, 'IP', body)
        send_via_gmail(gmail_id, gmail_pw, msg)
        save_ip(ip_file, cur_ip)
my_ipというファイルがないと失敗するので、あらかじめ作成しておきましょう。本当はこのへんも例外とかで処理しなきゃダメなんだろうけどね。

2 件のコメント:

  1. pythonのモジュールの充実っぷりに泣いた

    返信削除
  2. デフォルトで使えるってのはすごく重要だってRubyOnRailsの作者の人も言ってましたね~

    返信削除