- 2008-09-21 (日) 20:49
- Gmail | feedparser | python | smtplib
最近、Web上の色々なコードを写経したり、変更を加えたりして少しずつPythonの勉強をしていますが、今回Setomitsさんのblogで拝見した天気予報の定期送信スクリプトを自分なりにアレンジし、Gmailから送信出来るように変更してみました。パースした内容の加工は何もしていません(したいけどまだ勉強中)。使用方法は、第1引数に送信先のメールアドレス、第2引数に地域コード(静岡県中部は5010)を与えます。書いたコードは下記の様になりました。
# coding: utf-8
to_addr = sys.argv[1]
area = sys.argv[2]
def create_contents(u):
data = feedparser.parse(u)
f = [data.feed.title] + [entry.title for entry in data.entries]
s, b = f[0], f[1:]
return '\n'.join(b), s
def create_message(from_addr, to_addr, subject, body, encoding):
msg = MIMEText(body.encode(encoding), 'plain', encoding)
msg['Subject'] = Header(subject, encoding)
msg['From'] = from_addr
msg['To'] = to_addr
msg['Date'] = formatdate()
return msg
def send_via_gmail(from_addr, to_addr, msg):
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login('YOUR_GMAIL_ADDRESS', 'YOUR_PASSWORD')
s.sendmail(from_addr, to_addr, msg.as_string())
s.close()
def main():
from_addr = 'YOUR_GMAIL_ADDRESS'
url = 'http://rss.weather.yahoo.co.jp/rss/days/%s.xml' % area
body, subject = create_contents(url)
msg = create_message(from_addr, to_addr, subject, body, 'UTF-8')
send_via_gmail(from_addr, to_addr, msg)
if __name__ == '__main__':
main()
ここで問題(というか不思議な現象)が発生。携帯(SoftBank)やISPのアドレスに送ったメール内容はこのような感じになりますが

Gmailへ送った場合は途中で内容が切れてしまいます。またFromアドレスであるGmailの送信済みメール内容は、どの送信アドレスに送ったにも関わらず同じように途中で内容が切れてしまっています。

とりあえずメールは携帯へ送ることになるので困りませんが、この現象については継続して調べていきます。
[2008年9月30日追記]
時間が掛かりましたが、コメントあったようにエンコード関係だったようで、コードの修正をしました。
[追記ここまで]
参考サイト
Comments:3
- setomits 08-09-22 (月) 0:41
-
create_contents() で返ってくる body や subject がどこでも明示的に encode されていないようですけど、そのへんとかどうなんでしょうね。
すみません、検証はしていません…。 - aoshiman 08-09-22 (月) 8:20
-
コメントありがとうございます。encodeとか何も考えていませんでした。確認してみます!
- Dotty 08-10-28 (火) 2:30
-
People should read this.
Trackbacks:0
- Trackback URL for this entry
- http://aoshiman.net/weblog/2008/09/21/yahoo_rss_gmail/trackback/
- Listed below are links to weblogs that reference
- PythonでYahoo!天気情報のRSSをパースしてGmailから送信する from “南船北馬”
