Почтовое тело является строкой иногда и списком иногда. Почему?

Ваш код правильный!

Живой пример:

function changeImg() {
  var x = document.getElementById("card_1_img");
  x.src = "https://www.w3schools.com/images/compatible_firefox.gif";
}

Ссылка:

7
задан Helen 28 August 2009 в 19:46
поделиться

4 ответа

Ну, ответы корректны, необходимо прочитать документы, но для примера универсального пути:

def get_first_text_part(msg):
    maintype = msg.get_content_maintype()
    if maintype == 'multipart':
        for part in msg.get_payload():
            if part.get_content_maintype() == 'text':
                return part.get_payload()
    elif maintype == 'text':
        return msg.get_payload()

Это подвержено некоторой аварии, поскольку возможно, что сами части могли бы иметь мультичасти, и это действительно только возвращает первую текстовую часть, таким образом, это могло бы быть неправильно также, но можно играть с ним.

13
ответ дан 6 December 2019 в 05:43
поделиться

Столь сумасшедший, как это могло бы казаться, причина иногда строка, иногда семантика списка дана в документации. В основном многослойные сообщения возвращаются как списки.

10
ответ дан 6 December 2019 в 05:43
поделиться
0
ответ дан 6 December 2019 в 05:43
поделиться

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

def walkMsg(msg):
  for part in msg.walk():
    if part.get_content_type() == "multipart/alternative":
      continue
    yield part.get_payload(decode=1)

Метод walk() возвращает итератор, с которым вы можете выполнить цикл ( т.е. это генератор). Если сообщение не является контейнером частей (т. е. не имеет вложений или альтернатив), метод walk() вернет итератор с одним элементом — само сообщение.

Вы хотите пропустить любые «составные» части, так как они просто склеиваются.

Приведенный выше метод возвращает все читаемые части. Вы можете расширить это, чтобы просто возвращать текстовые части, если они содержат информацию, которую вы ищете.

Обратите внимание, что в Python 2.5 методы get_type(), get_main_type() и get_subtype() были удалены -> http://docs.python.org/library/email.message.html#email .message.Message.walk

10
ответ дан 6 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

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