Без наличия в моем почтовом ящике сообщения, которое является репрезентативным, его трудно обработать (я никогда не использовал poplib). Сказав это, некоторые вещи, которые могут помочь из моего небольшого расследования:
Прежде всего, используйте интерфейс командной строки для Python и функции dir()
и help()
: они могут многое рассказать о том, что выходит. Вы всегда можете вставить help(oAttach)
, dir(oAttach)
и print oAttach
в свой код, чтобы получить представление о том, что происходит, когда он зацикливается. Если вы вводите его в интерфейс командной строки построчно, в этом случае это даже проще.
Что я думаю вам нужно сделать, это пройти через каждую привязанность и понять, что это такое. Для обычного вложения электронной почты, он, вероятно, закодирован в base64, поэтому может помочь что-то вроде этого:
#!/usr/bin/python
import poplib, email, mimetypes
# Do everything you've done in the first code block of your question
# ...
# ...
import base64
for part in oMsg.walk():
# I've removed the '1' from the argument as I think you always get the
# the first entry (in my test, it was the third iteration that did it).
# However, I could be wrong...
oAttach = part.get_payload()
# Decode the base64 encoded attachment
oContent = b64decode(oAttach)
# then maybe...?
oMsgAttach = email.message_from_string(oContent)
Обратите внимание, что вам, вероятно, нужно проверять oAttach в каждом случае, чтобы убедиться, что оно выглядит как сообщение. Когда у вас есть переменная sMail
, выведите ее на экран. Затем вы можете найти что-то вроде Content-Transfer-Encoding: base64
, что даст вам подсказку о том, как кодируется вложение.
Как я уже сказал, я не использовал ни один из модулей poplib, email или mimetypes, поэтому я не уверен, поможет ли это, но я подумал, что это может указать вам правильное направление.