未経験からITエンジニアへ
imaplibライブラリとは
imaplib
は、Pythonの標準ライブラリの1つであり、電子メールアカウントの受信に使用されます。imaplib
はIMAPプロトコルを使用してメールサーバーにアクセスします。imaplib
を使用することで、Pythonコードを介してメールサーバーと対話し、メールの取得やメールボックスの管理などを行うことができます。
IMAP(Internet Message Access Protocol)
- 電子メールを取り扱うための、インターネット標準プロトコルの1つです。
- IMAPを使用することで、Eメールサーバー上のメールデータをクライアント側で読み取ることができます。
- IMAPは、POP3よりも高機能であり、サーバー側にメールを保存するため、複数のクライアントで同じメールにアクセスすることができます。
使用方法
imaplib
ライブラリをPythonコードにインポートすることで、IMAP
プロトコルを使用してメールの取得やメールボックスの管理を行うことができます。- 以下は、
imaplib
ライブラリを使用してGmailアカウントにログインし、受信トレイのメールを検索して表示するサンプルコードです。
import imaplib
imap = imaplib.IMAP4_SSL('imap.gmail.com')
imap.login('your_email@gmail.com', 'your_password')
imap.select('inbox')
response, messages = imap.search(None, 'ALL')
messages = messages[0].split(b' ')
for mail in messages:
_, msg = imap.fetch(mail, 'RFC822')
print(msg[0]
)
imap.close()
imap.logout()
1. IMAPサーバへの接続
IMAP4_SSL()
メソッドを使用して、SSL接続でIMAPサーバに接続します。- 以下は、
imap.gmail.com
に接続する例です。
import imaplib
imap = imaplib.IMAP4_SSL('imap.gmail.com')
2. ログイン
login()
メソッドを使用して、IMAPサーバにログインします。- 引数には、メールアドレスとパスワードを指定します。
imap.login('your_email@gmail.com', 'your_password')
3. メールボックスの選択
select()
メソッドを使用して、メールボックスを選択します。- 引数には、メールボックスの名前を指定します。
imap.select('inbox')
4. メールの検索
search()
メソッドを使用して、メールを検索します。- 第1引数には、検索条件を指定する文字列を、第2引数には、検索する範囲を指定する文字列を指定します。
- 以下は、すべてのメールを検索する例です。
response, messages = imap.search(None, 'ALL')
5. メールIDの抽出
- 取得したメールIDは、
bytes
型のオブジェクトとなっているため、処理のためにはリストに変換する必要があります。 split()
メソッドを使用して、スペースで区切られたメッセージIDをリストに分割します。
messages = messages[0].split(b' ')
6. メールの取得
fetch()
メソッドを使用して、メールを取得します。- 第1引数には、取得するメールのIDを、第2引数には、取得する情報を指定する文字列を指定します。
- 以下は、RFC822形式のデータを取得する例です。
_, msg = imap.fetch(mail, 'RFC822')
print(msg[0]
)
7. メールの削除
store()
メソッドを使用して、メールを削除します。- 第1引数には、削除するメールのIDを、第2引数には、フラグを指定する文字列を指定します。
- 以下は、指定したメールを削除する例です。
imap.store(mail, '+FLAGS', '\Deleted')
imap.expunge()
8. 未読メールの数をカウント
search()
メソッドにUNSEENフラグを指定することで、未読メールの数をカウントすることができます。
response, messages = imap.search(None, 'UNSEEN')
unread_count = len(messages[0].split())
9. 既読フラグを付与
store()
メソッドにSEENフラグを指定することで、指定したメールの既読フラグを付与することができます。
imap.store(mail, '+FLAGS', '\Seen')
10. ジャンクメールを取得
select()
メソッドにJunkのフォルダを指定することで、ジャンクメールを取得することができます。
imap.select('Junk')
11. メールボックスのリネーム
rename()
メソッドを使用して、メールボックスの名前を変更することができます。
imap.rename('inbox', 'new_mailbox_name')
12. メールボックスの作成
create()
メソッドを使用して、新しいメールボックスを作成することができます。
imap.create('new_mailbox_name')
13. メールボックスの削除
delete()
メソッドを使用して、メールボックスを削除することができます。
imap.delete('new_mailbox_name')
14. キーワード検索
search()
メソッドにキーワードを指定することで、メールの検索を行うことができます。
response, messages = imap.search(None, 'KEYWORD python')
15. ヘッダ情報の取得
fetch()
メソッドにBODY[HEADER]を指定することで、ヘッダ情報を取得することができます。
_, msg = imap.fetch(mail, 'BODY[HEADER]')
print(msg[0]
)
16. MIME形式のメッセージの取得
fetch()
メソッドにBODY[]を指定することで、MIME形式のメッセージを取得することができます。
_, msg = imap.fetch(mail, 'BODY[]')
print(msg[0]
)
17. メールヘッダのパース
email
ライブラリを使用して、メールヘッダをパースすることができます。
import email
_, msg = imap.fetch(mail, '(BODY[HEADER])')
header_data = msg[0]
parsed_header = email.message_from_bytes(header_data)
print(parsed_header['From'])
18. 添付ファイルの取得
email
ライブラリを使用して、メールから添付ファイルを取得することができます。
_, msg = imap.fetch(mail, '(BODY.PEEK[])')
parsed_body = email.message_from_bytes(msg[0]
)
for part in parsed_body.walk():
filename = part.get_filename()
if filename:
file_data = part.get_payload(decode=True)
with open(filename, 'wb') as f:
f.write(file_data)
19. メールサイズの取得
fetch()
メソッドにRFC822.SIZEを指定することで、メールサイズを取得することができます。
_, msg = imap.fetch(mail, 'RFC822.SIZE')
print(int(msg[0]))
20. メールの移動
copy()
メソッドとstore()
メソッドを使用して、メールを移動することができます。
imap.select('source_mailbox')
_, msg = imap.fetch(mail, 'RFC822')
imap.select('destination_mailbox')
imap.append('destination_mailbox', None, None, msg[0]
)
imap.store(mail, '+FLAGS', '\Deleted')
imap.expunge()
公式ドキュメント
- https://docs.python.org/3/library/imaplib.html
最後にpythonでめちゃわかりやすいおすすめの本を紹介します!!