環境
- PRETTY_NAME=”Ubuntu 22.04.3 LTS”
- Python 3.10.12
- pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
手順
imap_toolsというのが楽らしいのでインストール
pip install imap_tools
インポートして実行
import imap_tools
mailbox_name = "INBOX.ジム.予約"
status, messages = mail.select(imap_tools.imap_utf7.encode(mailbox_name))
※Ubuntsuを24にあげたときにインストールしたimap_tools-1.7.2ではimap_tools.imap_utf7.encodeからimap_tools.imap_utf7.utf7_encodeと微妙な名称変更が入っている
何もしない場合のエラー
mail.select(“INBOX.ジム.予約”)
として
yoshitake@mail:~/dovecot_delivery$ python3 test.py Traceback (most recent call last): File "/home/yoshitake/dovecot_delivery/test.py", line 15, in <module> mail.select("INBOX.ジム.予約") File "/usr/lib/python3.10/imaplib.py", line 756, in select typ, dat = self._simple_command(name, mailbox) File "/usr/lib/python3.10/imaplib.py", line 1230, in _simple_command return self._command_complete(name, self._command(name, *args)) File "/usr/lib/python3.10/imaplib.py", line 987, in _command arg = bytes(arg, self._encoding) UnicodeEncodeError: 'ascii' codec can't encode characters in position 6-7: ordinal not in range(128)
ソース全体
import imaplib
import imap_tools
from email.header import decode_header
# IMAPサーバの設定
mail_server = 'mail.huga.co.jp'
username = 'hoge'
password = 'hugahuga'
# IMAPサーバに接続
mail = imaplib.IMAP4_SSL(mail_server)
mail.login(username, password)
# # メールボックスを選択
mailbox_name = "INBOX.ジム.予約"
status, messages = mail.select(imap_tools.imap_utf7.encode(mailbox_name))
# # メール検索(例: 未読メール)
status, messages = mail.search(None, "(UNSEEN)")
unread_count = len(messages[0].split())
print(f"未読メールの件数: {unread_count}")
# 接続を閉じる
mail.close()
mail.logout()