傀儡師の館.Python

傀儡師の館.Python

PR

Calendar

Keyword Search

▼キーワード検索

Archives

2024.06
2024.05
2024.04
2024.03
2024.02
2024.01
2023.12
2023.11
2023.10
2023.09

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2011.05.22
XML
カテゴリ: Python
Python から Gmail を使う方法についてまとめておく。

Gmail を使ってメールを送信する



標準ライブラリの smtplib を使って送信することができる。


# -*- coding: utf-8 -*-

import smtplib

from_address = 'your_email_address@gmail.com'
to_address = 'to_mail_address@gmail.com'
message = 'Message to send.'

# Gmail のユーザー名とパスワード
username = 'your_username'
password = 'your_password'

# メールを送信する
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()


でも、これだと MIMEエンコードしてくれないよねということで、 send a multipart email via gmail's SMTP server (Python recipe) を使えば、

headers = dict()
headers["Subject"] = "これはテストですよ"
headers["To"] = ["to_address1@example.com", "to_address2@example.com"]
headers["From"] = "Your Name <your_address@gmail.com>"
password = "your_password"

body = u"""今日の天気は雨でした。

--
民主党は滅びよ!
"""

email_it_via_gmail(headers, text=body, password=password)


みたいに、簡単に Gmail でメールを送信することができる。encode も引数に追加して、iso-2022-jp でも送れるようにするとかしてもよいかもね。ちなみに、これを使って text=body ではなく html=body とすれば、HTML メールも送信できるように作られている。

パスワードなどのパラメータをスクリプトから切り離したければ、 Python Gmail script (smtp) (Python recipe) のように ConfigParser を使うとか、 gmailを、Pythonスクリプトでメールサーバとして使うtips のように yaml を使うとかすればよいだろう。

その他、 Pythonでメールを送信したい人のためのサンプル集

と、ここまではよいとして、Gmail 上のメールを取り出して何かしたいとかいうこともあると思う。ということで、次は、IMAP を使ってアクセスしてみる。

Gmail に IMAP でアクセスする



とりあえず Gmail の IMAP の開始方法 の設定をしてあるのを前提とする。


import imaplib
from email.header import decode_header

gmail = imaplib.IMAP4_SSL('imap.gmail.com', 993)
gmail.login('your_address', 'your_password')


で、ログインすることができたら、あとは、あれこれ操作すればよい。受信トレイに対して何かするなら INBOX を select してから、あれこれする。とりあえず、未読の数を数えてみる。さらに、ひとつ、メールを取り出してみる。

# 受信トレイを選択
gmail.select('INBOX')

# 未読のカウント
status, response = gmail.status('INBOX', "(UNSEEN)")
unreadcount = int(response[0].split()[2].strip(').,]'))
print unreadcount

# 受信トレイから、1つめのメールを取り出してみる。
status, count = gmail.select('Inbox')
status, count = gmail.select()
status, data = gmail.fetch(count[0], '(UID BODY[TEXT])')
print data[0][1]
# デコードしないとだめだね

# サブジェクトを表示してみる
_,[data] = gmail.search(None,'ALL')
for i in data.split(' '):
_,sub = gmail.fetch(i,'(BODY[HEADER.FIELDS (SUBJECT)])')
# デコードして表示してみようか
decoded = decode_header(sub[0][1].strip())[1]
print unicode(decoded[0], decoded[1])

gmail.close()
gmail.logout()


次に続く。




無料アクセス解析






お気に入りの記事を「いいね!」で応援しよう

Last updated  2011.05.23 03:41:54
コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: