python接收邮件
2021-04-16 本文已影响0人
elijah777
1、说明
接收和发送刚好是相反的
先简历数据连接,获取到服务器上邮件的内容。再解析出相关的数据
对于文本可以直接读取内容,但html就需要做不同的处理,
2、登陆获取内容
def get_email_content():
mail_user = 'xxxxx@163.com'
mail_pass = 'password'
# 邮件服务器地址,以下为网易邮箱
pop3_server = 'pop.163.com'
# 开始连接到服务器
server = poplib.POP3(pop3_server)
# 打开或者关闭调试信息,为打开,会在控制台打印客户端与服务器的交互信息
server.set_debuglevel(1)
# 打印POP3服务器的欢迎文字,验证是否正确连接到了邮件服务器
print(server.getwelcome().decode('utf8'))
# 开始进行身份验证
server.user(mail_user)
server.pass_(mail_pass)
# 返回邮件总数目和占用服务器的空间大小(字节数), 通过stat()方法即可
email_num, email_size = server.stat()
print("消息的数量: {0}, 消息的总大小: {1}".format(email_num, email_size))
# 使用list()返回所有邮件的编号,默认为字节类型的串
rsp, msg_list, rsp_siz = server.list()
print("服务器的响应: {0},\n消息列表: {1},\n返回消息的大小: {2}".format(rsp, msg_list, rsp_siz))
print('邮件总数: {}'.format(len(msg_list)))
# 下面单纯获取最新的一封邮件
total_mail_numbers = len(msg_list)
print('共{}封邮件'.format(total_mail_numbers))
all_msg = []
for r in range(1, total_mail_numbers):
rsp, msglines, msgsiz = server.retr(r)
print("服务器的响应: {0},\n原始邮件内容: {1},\n该封邮件所占字节大小: {2}".format(rsp, msglines, msgsiz))
msg_content = b'\r\n'.join(msglines).decode('utf-8')
msg = Parser().parsestr(text=msg_content)
# print('解码后的邮件信息:\n{}'.format(msg))
# 关闭与服务器的连接,释放资源
all_msg.append(msg)
server.close()
return all_msg
3、解析出主题、来源和内容
# 解析邮件主题
def parser_subject(msg):
subject = msg['Subject']
value, charset = decode_header(subject)[0]
if charset:
value = value.decode(charset)
print('邮件主题: {0}'.format(value))
return value
# 解析邮件来源
def parser_address(msg):
hdr, addr = parseaddr(msg['From'])
# name 发送人邮箱名称, addr 发送人邮箱地址
name, charset = decode_header(hdr)[0]
if charset:
name = name.decode(charset)
print('发送人邮箱名称: {0},发送人邮箱地址: {1}'.format(name, addr))
# 解析邮件正文
def get_mail_content(msg):
if msg == None:
return None
for part in msg.walk():
if not part.is_multipart():
data = part.get_payload(decode=True)
# print("emailcontent:\r\n"+data.decode())
return data.decode()
调用
if __name__ == '__main__':
# 返回解码的邮件详情
all_msg = get_email_content()
for msg in all_msg:
# 解析邮件主题
parser_subject(msg)
# 解析发件人详情
parser_address(msg)
# 解析内容
content = get_mail_content(msg)
print(content)
image-20210412115213031.png
如遇到网易服务器返回错误代码,可以参考错误原因
http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html
发送邮件可参考
https://www.jianshu.com/p/98c6720756a5
2021/04/16 于成都