Imaplib Gmailからメールを取得する

提供:TuntunkunMediaWiki

移動: 案内, 検索

目次

imapとは

imapは、インターネットやイントラネット上で、電子メールを保存しているサーバからメールを受信するためのプロトコルです。POPと違って、メールはサーバ上のメールボックスで管理され、タイトルや発信者を見て受信するかどうかを決めることができます。

Gmail(Googleのimapサーバー)にアクセスしてみる

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import imaplib
from getpass import getpass
 
#-Gmailのアドレスとパスワードを取得---------------------------------------------
mailaddr = raw_input('Enter gmail address: ')
password = getpass('Enter gmail password: ')
 
#-imapのアクセス先メールサーバーの指定------------------------------------------
gmail = imaplib.IMAP4_SSL('imap.gmail.com', 993)
 
#-Gmailにログイン--------------------------------------------------------------
print gmail.login(mailaddr, password)
 
#-Gmailからログアウト----------------------------------------------------------
gmail.logout()

実行結果

 Enter gmail address: example@gmail.com
 Enter gmail password: 
 ('OK', ['tuntunkun@gmail.com ???? authenticated (Success)'])

例外処理(imaplibの例外にしか対応してません)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import imaplib
from getpass import getpass
 
#-Gmailのアドレスとパスワードを取得---------------------------------------------
mailaddr = raw_input('Enter gmail address: ')
password = getpass('Enter gmail password: ')
 
#-imapのアクセス先メールサーバーの指定------------------------------------------
gmail = imaplib.IMAP4_SSL('imap.gmail.com', 993)
 
try:
	#-Gmailにログイン------------------------------------------------------
	gmail.login(mailaddr, password)
 
except imaplib.IMAP4.error, e:
	#-例外表示--------------------------------------------------------------
	print e
 
#-Gmailからログアウト-----------------------------------------------------------
gmail.logout()

各例外について

Gmailからメールを取得する

本文を取得すると時間がかかり過ぎるかもしれないので、件名だけを取得します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import imaplib
import email
from getpass import getpass
 
#-Gmailのアドレスとパスワードを取得---------------------------------------------
mailaddr = raw_input('Enter gmail address: ')
password = getpass('Enter gmail password: ')
 
#-imapのアクセス先メールサーバーの指定------------------------------------------
gmail = imaplib.IMAP4_SSL('imap.gmail.com', 993)
 
#-通常処理----------------------------------------------------------------------
try:
	#-Gmailにログイン------------------------------------------------------
	gmail.login(mailaddr, password)
 
	#-メールボックスの選択---------------------------------------------------
	gmail.select()
 
	#-メールボックスからメールの検索-----------------------------------------
	status, [strInNum] = gmail.search(None, "ALL")
	for num in strInNum.split():
		#-メールボックスからメールの取得---------------------------------
		status, data = gmail.fetch(num, '(RFC822)')
		message = email.message_from_string(data[0][1])
		decodefrag = email.Header.decode_header(message.get('Subject'))
 
		#-文字エンコーディング毎の処理-----------------------------------
		for subject, encode in decodefrag:
			#-shift-jisの場合-------------------------------------
			if encode == 'shift-jis':
				subject = unicode(subject, 'shift-jis')
			#-shift-jisの場合-------------------------------------
			if encode == 'iso-2022-jp':
				subject = unicode(subject, 'iso-2022-jp')
 
			#-表示(件名、エンコーディング)------------------------
			print subject, encode
 
#-例外処理----------------------------------------------------------------------
except:
	pass
 
#-Gmailからログアウト----------------------------------------------------------
gmail.logout()
個人用ツール
名前空間
変種
操作
案内
ツールボックス