Как я могу получить текстовое содержание электронного письма использование Python?

Вы можете получить BehaviorService и подписаться на его BeginDrag и EndDrag события.

  • BeginDrag : Происходит, когда BehaviorService начинает операцию перетаскивания.
  • EndDrag : Происходит, когда BehaviorService завершает операцию перетаскивания.

Пример

Сначала необходимо получить экземпляр BehaviorService, например, если у вас есть доступ к дизайнеру, хосту дизайнера или сайту можно получить службу поведения следующим образом:

var behaviorSvc = (BehaviorService)Site.GetService(typeof(BehaviorService));

Затем подписаться на события:

behaviorSvc.BeginDrag += BehaviorSvc_BeginDrag;
behaviorSvc.EndDrag += BehaviorSvc_EndDrag;

и обрабатывать события:

private void BehaviorSvc_EndDrag(object sender, BehaviorDragDropEventArgs e)
{  
}

private void BehaviorSvc_BeginDrag(object sender, BehaviorDragDropEventArgs e)
{
}

36
задан MarianD 24 June 2018 в 11:51
поделиться

2 ответа

В составном сообщении электронной почты email.message.Message.get_payload () возвращает список с одним элементом для каждой части. Самый простой способ - просмотреть сообщение и получить полезную нагрузку для каждой части:

import email
msg = email.message_from_string(raw_message)
for part in msg.walk():
    # each part is a either non-multipart, or another multipart message
    # that contains further parts... Message is organized like a tree
    if part.get_content_type() == 'text/plain':
        print part.get_payload() # prints the raw text

Для сообщения, не состоящего из нескольких частей, нет необходимости выполнять все действия. Вы можете сразу перейти к get_payload (), независимо от content_type.

msg = email.message_from_string(raw_message)
msg.get_payload()

Если контент закодирован, вам нужно передать None в качестве первого параметра в get_payload () , а затем Истина (флаг декодирования - второй параметр). Например, предположим, что мое электронное письмо содержит вложение документа MS Word:

msg = email.message_from_string(raw_message)
for part in msg.walk():
    if part.get_content_type() == 'application/msword':
        name = part.get_param('name') or 'MyDoc.doc'
        f = open(name, 'wb')
        f.write(part.get_payload(None, True)) # You need None as the first param
                                              # because part.is_multipart() 
                                              # is False
        f.close()

Что касается получения разумного простого текстового приближения части HTML, я обнаружил, что html2text работает чертовски хорошо.

84
ответ дан 27 November 2019 в 05:32
поделиться

Прибавлять превосходный ответ @Jarret Hardie:

мне лично нравится преобразовывать такие структуры данных к словарю, который я могу снова использовать позже, таким образом, что-то вроде этого, где эти content_type ключ и эти payload, является значением:

import email

[...]

email_message = {
    part.get_content_type(): part.get_payload()
    for part in email.message_from_bytes(raw_email).walk()
}

print(email_message["text/plain"])

0
ответ дан 27 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: