@nukler
местный юродивый

Как добавить свою часть в полученный email и перенаправить на новый адрес?

Добрый день.

Подскажите. Есть задача.
1. Получить почтовое сообщение.
2. Получить нужные поля "From", "To", "Subject"
3. Полученное сообщение добавить свои данные в начало и в конец. Что то типа "Сообщение получено на ящик 123@vZyx.com и содержит нужное слово"
4. Направить на нужную почту.

Все это получилось сделать.

imap_descprt = get_connect_to_server_IMAP("123@vZyx.com", global_check_email_login, global_check_email_password, global_IMAP_port)

imap_descprt.select('INBOX')
status, res = imap_descprt.uid("search", None, "(UNSEEN)")
res = b''.join(res).decode("UTF-8")

if res and status == "OK":
	body = str()

	for res_now in res.split(" "):
		email_from_ = str()
		result, data = imap_descprt.uid("fetch",res_now,"(RFC822)")

		full_mail = email.message_from_bytes(data[0][1], policy=policy.default)

		if full_mail.is_multipart():
			for part in full_mail.get_payload():
				ctype = str()
				charset_type = str(part.get_content_charset())
				ctype = part.get_content_type()
				if ctype == "text/plain" or ctype == "text/html":
					body += part.get_payload(decode = True).decode(charset_type)  # decode
					#body += part.get_payload(decode = False) # No decode
		else:
			charset_type = str(full_mail.get_content_charset())
			body = full_mail.get_payload(decode = True).decode(charset_type)	# decode
			#body = full_mail.get_payload(decode = False)	# No decode


Все работает если само письмо простое (то есть все пункты сделаны), body содержит нужный текст, но если это красиво оформленная html страничка, то жесть, угар, Игаиль. Все криво, ужасно.
Пытался в body добавлять как декодированный так и не декодированный текст письма и затем
msg = MIMEMultipart("mixed")
msg['To'] = email_from
msg['From'] = sender_email
msg['Subject'] = Header(str("REsend: " + email_subject), 'UTF-8')

msg.attach( MIMEText(body_to_send_part_1, "html", _charset='UTF-8') )
msg.attach( MIMEText(body, "plain", _charset='UTF-8') )

Понятно что MIMEText для не декодированного сообщения не подходит, а что подходит не смог найти. Вообще примеров по отправке писем чуть больше чем надо, а вот именно работа с данными из письма, к сожалению приходится вычитывать весть stackoverflow и github

Пните пожалуйста на нужные примеры.

Спасибо.
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nukler Автор вопроса
местный юродивый
Всем спасибо =)

Вообщем, сам дурак. Не надо парсить тело сообщения.
Его просто пихаем в новое сообщение после нужных нам данных.
msg = MIMEMultipart("mixed")
msg['To'] = email_from
msg['From'] = sender_email
msg['Subject'] = Header(str("REsend: " + email_subject), 'UTF-8')

msg.attach( MIMEText(body_to_send_part_1, "html", _charset='UTF-8') )
msg.attach(full_mail)


Далее в конце просто отправляем как
smtp_descprt.sendmail(sender_email, [email_from], msg.as_bytes())


Новое письмо уходит в том же виде что и пришло.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы