2010年7月6日火曜日

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

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

sendIP.py
01#!/usr/bin/env python
02# -*- coding: utf-8 -*-
03 
04# Load IP from file
05def load_ip(filename):
06    f = open(filename, 'r')
07    ip = f.readline()
08    return ip
09 
10# Save IP
11def save_ip(filename, ip):
12    f = open(filename, 'w')
13    f.write(ip)
14 
15# Get global IP.
16import urllib2
17def get_ip():
18    ip = urllib2.urlopen('http://ipcheck.ieserver.net').read()
19    return ip
20 
21# Send IP by e-mail.
22import smtplib
23from email.MIMEText import MIMEText
24 
25def create_message(from_addr, to_addr, subject, body):
26    msg = MIMEText(body)
27    msg['Subject'] = subject
28    msg['From'] = from_addr
29    msg['To'] = to_addr
30    return msg
31 
32def send_via_gmail(gmail_id, gmail_pw, msg):
33    s = smtplib.SMTP('smtp.gmail.com', 587)
34    s.ehlo()
35    s.starttls()
36    s.ehlo()
37    s.login(gmail_id, gmail_pw)
38    s.sendmail(msg['From'], msg['To'], msg.as_string())
39    s.close()
40 
41if __name__ == '__main__':
42    from_addr = 'hoge@gmail.com'
43    to_addr = 'piyo@gmail.com'
44    gmail_id = 'fuga@gmail.com'
45    gmail_pw = 'password'
46    ip_file = 'my_ip'
47 
48    cur_ip = get_ip()
49    old_ip = load_ip(ip_file)
50 
51    print cur_ip
52    print old_ip
53     
54    if cur_ip != old_ip:
55        body = 'IP has changed! ' + old_ip + ' --> '+ cur_ip
56        msg = create_message(from_addr, to_addr, 'IP', body)
57        send_via_gmail(gmail_id, gmail_pw, msg)
58        save_ip(ip_file, cur_ip)
my_ipというファイルがないと失敗するので、あらかじめ作成しておきましょう。本当はこのへんも例外とかで処理しなきゃダメなんだろうけどね。

2 件のコメント:

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

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

    返信削除