Discuss / Python / 简单加了一下多收件人、和alternative类型处理

简单加了一下多收件人、和alternative类型处理

Topic source

WOWsapling

#1 Created at ... [Delete] [Delete and Lock User]

<pre> import poplib from email.header import decode_header from email.utils import parseaddr from email.parser import Parser server = input('Input Pop server:') email = input('Input email:') password = input('Input password:') def print_info(msg, indent=0): if indent == 0: for obj in ['From', 'To', 'Cc', 'Subject']: value = msg.get(obj, '') if obj == 'Subject': subject = decode_str(value) print('%s: %s' % (obj, subject)) else: # 对多个接收,抄送人进行处理 mail_lists = value.split(',') user_lists = obj + ':' len_mail = len(mail_lists) count = 0 for mail in mail_lists: name, addr = parseaddr(mail) name = decode_str(name) count += 1 if count == len_mail: user_lists += '%s <%s>' % (name, addr) break else: user_lists += '%s <%s>,' % (name, addr)
print(user_lists) if (msg.is_multipart()): payloads = msg.get_payload() for index, payload in enumerate(payloads): # print(index, payload) print('%sPart:%s' % (' ' indent, index+1)) print('%s--------------------' % (' ' indent)) print_info(payload, indent+1) print('%s--------------------' % (' ' indent)) else: content_type = msg.get_content_type() if content_type == 'text/plain' or content_type == 'text/html': content = msg.get_payload(decode=True) charset = guess_charset(msg) if charset: content = content.decode(charset) print('%s%s' % (' ' indent, content)) # 对alternative继续递归处理
elif content_type == 'multipart/alternative': for m in msg.get_payload(): print_info(m, indent+1) else: print('%sAttachment: %s' % (' ' * indent, content_type)) def guess_charset(msg): charset = msg.get_charset() if not charset: content_type = msg.get('Content-Type', '') pos = content_type.find('charset=') if pos >= 0: charset = content_type[pos+8:].strip() return charset def decode_str(msg): msg, charset = decode_header(msg)[0] if charset: msg = msg.decode(charset) return msg pop3 = poplib.POP3(server) pop3.setdebuglevel(1) print(pop3.getwelcome()) pop3.user(email) pop3.pass(password) print('Message:%s Size:%s' % pop3.stat()) resp, lists, octet = pop3.list() len_mail = len(lists) print(len_mail) resp, mail, octet = pop3.retr(len_mail) # print(mail) msg_content = b'\r\n'.join(mail).decode('utf-8') msg = Parser().parsestr(msg_content) print_info(msg) pop3.quit() </pre>

结果:

<pre> From:xxx xxx@qq.com To:xxx xxx@163.com Cc: <> Subject: 你好 Part:1 -------------------- Part:1 -------------------- 你好 -------------------- Part:2 -------------------- <div>你好</div> -------------------- -------------------- Part:2 -------------------- Attachment: application/octet-stream -------------------- cmd 'QUIT' </pre>

WOWsapling

#2 Created at ... [Delete] [Delete and Lock User]
  • 上面的alternative 处理有点多余了,删除。

  • 1

Reply