2016-09-28 2 views
1

Я пишу код python для небольшого инструмента, в котором я пытаюсь получить почту с помощью библиотек python imaplib и электронной почты. Сводка кода - это что-то вроде ниже.imaplib: какие факторы определяют тип maintype: «text» или «multipart»

import imaplib 
import email 
mail = imaplib.IMAP4_SSL('imap.server') 
mail.login('[email protected]', 'password') 
result, data = mail.uid('search', None, "ALL") 
latest_email_uid = data[0].split()[-1] 
result, data = mail.uid('fetch', latest_email_uid, '(RFC822)') 
raw_email = data[0][1] 
email_message = email.message_from_string(raw_email) 
maintype = email_message_instance.get_content_maintype() 

Я выполняю скрипт с разных хост-машин одновременно. Проблема, с которой я столкнулся, заключается в том, что при получении почтового ящика для такой же входящий адрес электронной почты, на первом главном макросе основного компьютера оценивается как «текст», тогда как для другого хост-компьютера он оценивается как «multipart» во время выполнения сценария.

Хотелось бы знать, как эти значения определяются во время выполнения, и если я всегда хочу, чтобы тип «многопоточность» был стандартным, я должен следовать при написании электронной почты в теле письма.

+0

И какая разница между 'raw_email' на одной машине и другой? – zvone

+0

Hi zvone, raw_email для обоих случаев имеет raw html-код с несколькими значениями. все большинство всего html-кода такие же, кроме нескольких различий. Для maintype = multipart присутствует Content-Type = "multipart/alternative", граничный тег. Для maintype = text, Content-Type = "text/html", поле границы нет – nil13

ответ

0

Из комментариев:

raw_email для обоих случаев имеет необработанный HTML код с несколькими значениями. все большинство всего html-кода такие же, кроме нескольких различий. Для maintype = multipart присутствует Content-Type = "multipart/alternative", граничный тег. Для maintype = text, Content-Type = "text/html", граничное поле нет

Ну, это отвечает на вопрос. get_content_maintype возвращает первую часть Content-Type, что составляет multipart для multipart/alternative и text для текст/html.

multiplart/alternative означает, что существует несколько альтернативных версий электронной почты. Обычно это html + текст. Письма часто отправляются таким образом, потому что тогда они могут быть прочитаны любым клиентом (текстовая часть), но все равно будут содержать форматирование HTML, которое будет использоваться в клиентах, которые его поддерживают.

Очевидно, что одно из писем было отправлено как с html, так и с текстом, тогда как другое содержит только html.

+0

спасибо zvone за комментарий. Это помогло мне получить подробное понимание. Но обратите внимание, что значения multipart/alternative и text/html поступают для одного и того же электронного письма во время разбора его тела. – nil13

+0

Затем сервер дает разные ответы в разных местах. Это Exchange? – Max

+0

@ nil13 Я не знаю, почему ваши письма разные. Это зависит от конфигурации серверов, через которые идет электронная почта. Как вы отправляете такое же письмо на windows и mac? Вы отправляете его на два письма? Если да, в чем разница между серверами одного электронного письма и другого? Или вы отправляете его по одному электронному адресу, а затем читаете от двух клиентов? Если да, то как? POP? IMAP? Во всяком случае, часть Python mistery разрешена. Это просто говорит вам правду. Теперь вы должны увидеть, кто или что изменяет электронную почту. – zvone

Смежные вопросы