WEBエンジニア必見

python imaplibライブラリ 使用方法【駆け出しエンジニア必見】

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でめちゃわかりやすいおすすめの本を紹介します!!

ABOUT ME
hibiki
高卒→公務員→大手WEB IT企業でソフトウェアエンジニアをしています。 未経験から大手WEB IT企業で働くまでにやったことなどを配信していきます! またアメリカのオンライン大学でコンピュータサイエンスを取得中(2年生)です。