以下通过python3 实现接收和发送邮件,网上相关说明文档很多。请自己查阅,这里只写入代码,
# 实例:通过poplib 模块接收指定账号的邮件并进行解码处理,结果可视化。
#!/opt/python3/bin/python3
# _*_ coding:utf-8 _*_
# Author: Yong
import smtplib
import email as pop_email
from email.parser import Parser
from email.mime.text import MIMEText
from email.utils import formataddr, parseaddr
from email.header import decode_header
import email, poplib, sys
# 接收邮件
def decode_str(s):
'''进行消息解码'''
value, charset = decode_header(s)[0]
# decode_header()返回一个list,因为像Cc、Bcc这样的字段可能包含多个邮件地址,所以解析出来的会有多个元素。上面的代码我们偷了个懒,只取了第一个元素。
if charset:
value = value.decode(charset)
return value
def guess_charset(msg):
'''返回字符编码'''
content_type = msg.get('Content-Type', '').lower()
pos = content_type.find('charset=')
if pos >= 0:
charset = content_type[pos + 8:].strip()
return charset
def pop_mail(pop_server, logname, logpwd):
'''进行接收邮件'''
tmp_list = []
mail_file = open('mail.txt', 'w', encoding='utf-8')
pop_obj = poplib.POP3(pop_server, 110)
try:
pop_obj.user(logname)
pop_obj.pass_(logpwd)
status, mail_list, oct = pop_obj.list()
for i in mail_list: # 根据邮件索引ID,循环每一个邮件
tmp_dict = {} # 临时存储每一个邮件,格式{'From':'', 'To':'', 'Subject':'', 'content':''}
content_list = pop_obj.retr(bytes.decode(i.split()[0])) # 根据索引ID,提取邮件内容
msg_content = '\n '.join([bytes.decode(text) for text in content_list[1]])
msg = Parser().parsestr(msg_content)
# 进行邮件头信息的提取
for head in ['From','To','Subject']:
value = msg.get(head, '') # 获取指定头的内容
if value:
if head == 'Subject':
mess_value = decode_str(value) # 对主题进行解码
else:
hdr, addr = parseaddr(value)