Получение ссылки на письмо
При работе с imaplib из Python столкнулся с проблемой: В данных письма не содержится информация, которая помогла бы в создании ссылки на это письмо. Я могу вытащить очень много разных данных, но ничего, что помогло бы создать ссылку. Возможно, решением является Message-ID внутри data, но никаких способов на просторах интернета я не нашел, всё-таки запрос довольно специфический.
P.S ссылка на сообщение в обычном виде выглядит примерно так: https://mail.yandex.ru/?uid=1747723179#message/102217909859165311
Код прикладываю:
import imaplib
from email.header import decode_header
# Сюда передаются данные для входа в почту (логин и пароль приложения)
EMAIL = '[email protected]'
PASSWORD = '...'
def read_incoming_emails(email_user=EMAIL, email_pass=PASSWORD):
mail = imaplib.IMAP4_SSL('imap.yandex.ru')
mail.login(email_user, email_pass)
# Папка "Входящие"
mail.select('inbox')
# Только непрочитанные сообщения
status, messages = mail.search(None, 'UNSEEN')
for num in messages[0].split():
# Получение данных сообщения
status, data = mail.fetch(num, '(RFC822)')
# Можно посмотреть, что внутри data. Message-ID находится именно там
# print('data')
# print(data)
email_msg = data[0][1]
# Декодирование сообщения
msg = email.message_from_bytes(email_msg)
# Получение темы сообщения
subject = decode_header(msg["Subject"])[0][0]
if isinstance(subject, bytes):
subject = subject.decode()
# Получение отправителя сообщения
from_ = msg.get("From")
print(f"Тема: {subject}")
print(f"От: {from_}")
# Если сообщение многочастное, получаем тело сообщения
if msg.is_multipart():
# Цикл по частям сообщения
for part in msg.walk():
# Если часть текстовая
if part.get_content_type() == "text/plain":
body = part.get_payload(decode=True).decode()
print(f"Body: {body}")
break
else:
print('Сообщение не удалось декодировать')
mail.logout()
read_incoming_emails()```