2010年7月5日月曜日

PythonでグローバルアドレスをGmailに送る

前回の続き。遠隔地ログインしているときグローバルIPが変わっても1時間ごとにGmailにIPを送っておけば安心だよね。というコンセプトでスクリプトを書いてみた。

前回はwgetの結果をリダイレクトしたものをipとして使用していたが、全部Pythonでやるために、urllib2パッケージを使用した。
sendIP.py
01#!/usr/bin/env python
02# -*- coding: utf-8 -*-
03 
04# Get global IP.
05import urllib2
06ip = urllib2.urlopen('http://ipcheck.ieserver.net').read()
07print ip
08 
09# Send IP by Gmail.
10import smtplib
11from email.MIMEText import MIMEText
12 
13def create_message(from_addr, to_addr, subject, body):
14    msg = MIMEText(body)
15    msg['Subject'] = subject
16    msg['From'] = from_addr
17    msg['To'] = to_addr
18    return msg
19 
20def send_via_gmail(gmail_id, gmail_pw, msg):
21    s = smtplib.SMTP('smtp.gmail.com', 587)
22    s.ehlo()
23    s.starttls()
24    s.ehlo()
25    s.login(gmail_id, gmail_pw)
26    s.sendmail(msg['From'], msg['To'], msg.as_string())
27    s.close()
28 
29if __name__ == '__main__':
30    from_addr = 'from@gmail.com'
31    to_addr = 'to@gmail.com'
32    gmail_id = 'example@gmail.com'
33    gmail_pw = 'password'
34 
35    msg = create_message(from_addr, to_addr, 'IP', str(ip))
36    send_via_gmail(gmail_id, gmail_pw, msg)
あとはこいつを/etc/cron.hourly/にコピーするかリンクすればおk。1時間ごとにGmail宛てに自分のグローバルIPを送ってくれます。

※追記: debian系のcronではファイル名に".(ドット)"が含まれていると実行されないようなので、拡張子を外しておいたほうがいいですね。

※さらに追記: /etc/cron.hourly/以下に配置するとroot権限でシステムワイドに実行されるようだ。さらに実行されるたびに"You have new mail."とか出ちゃったりするのでうざいことこの上ない。
1crontab -u ユーザ名 -e
2#エディタ起動
3MAILTO=""
40 * * * * /hoge/piyo/myscript.py
とか書いておくと、任意の場所から毎時0分に特定のユーザ権限で実行してくれる。こっちのほうが少し安心だし、MAILTO=""と書いておくことで、実行するたびにメールを送ることもない。

久々に生産的なことをやった気がする。次はRubyで実装してみるかな~。
参考URL

0 件のコメント:

コメントを投稿