の続きです。
※ ChatGPTで作ることになった経緯は ↑ 上リンクをご覧ください。
ChatGPT でここまで作れます。
import imaplib
import email
import os
import quopri
import base64
from email.header import decode_header
def decode_mime_words(s):
"""デコードされたファイル名を取得"""
decoded_string = ''
for word, encoding in decode_header(s):
elif encoding == 'quoted-printable':
elif encoding is not None:
word = word.decode(encoding)
if isinstance(word, bytes):
decoded_string += word
return decoded_string
# ここで直接値を指定します
EMAIL = 'your-email@gmail.com'
APP_PASSWORD = 'your-app-password'
# 接続とログイン
mail.login(EMAIL, APP_PASSWORD)
mail.select('inbox')
# メールの検索
status, messages = mail.search(None, '(UNSEEN)')
mail_ids = messages[0].split()
# メールごとの処理
for mail_id in mail_ids:
status, msg_data = mail.fetch(mail_id, '(RFC822)')
msg = email.message_from_bytes(msg_data[0][1])
for part in msg.walk():
# 添付ファイルの処理
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
filename = part.get_filename()
if filename:
decoded_filename = decode_mime_words(filename)
if not os.path.isdir('attachments'):
os.mkdir('attachments')
filepath = os.path.join('attachments', decoded_filename)
with open(filepath, 'wb') as f:
f.write(part.get_payload(decode=True))
print(f'Successfully downloaded {filepath}')
# 接続を閉じる
mail.logout()