当前位置:   article > 正文

利用爬虫+POP3收发邮件_爬虫邮件并分类

爬虫邮件并分类

开启邮箱的POP3协议并获取第三方客户端授权码(密码)

开启邮箱的POP3

以163邮箱为例,点击设置→POP3/SMTP/IMAP
在这里插入图片描述
点击开启
在这里插入图片描述

获取第三方客户端授权码(密码)

在这里插入图片描述

根据邮箱的主题名将邮件进行分类,并将各个附件分别保存

main.py 借鉴其他代码来进行修改: python+pop3进行附件下载.

// An highlighted block
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#poplib库 用来从pop3收取邮件
import poplib
#email 用来处理邮件信息的库
import email
#datetime 用来组成日期的库
import datetime
import time
import os
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr



# 输入邮件地址, 验证码和POP3服务器地址:
email = 'xxx@163.com'
password = 'xxx'
pop3_server = 'pop.163.com'


def decode_str(s):  # 字符编码转换
    value, charset = decode_header(s)[0]
    if charset:
        value = value.decode(charset)
    return value

def mkdir(path):
    if not os.path.exists(path):
        os.makedirs(path)
        print(path)
    else:
        pass

def get_att(msg):
    import email
    attachment_files = []
    for part in msg.walk():
        file_name = part.get_filename()  # 获取附件名称类型
        contType = part.get_content_type()
        if file_name:
            h = email.header.Header(file_name)
            dh = email.header.decode_header(h)  # 对附件名称进行解码
            filename = dh[0][0]
            if dh[0][1]:
                filename = decode_str(str(filename, dh[0][1]))  # 将附件名称可读化
                subject = decode_str(msg["subject"]).rstrip()
                print(subject+"\\"+filename)
                # filename = filename.encode("utf-8")
            data = part.get_payload(decode=True)  # 下载附件
            source_dir = os.path.join('G:\\研一大文件\\课外事\\大数据作业\\test\\',subject)
            mkdir(source_dir)
            att_file = open(os.path.join(source_dir,filename),
                            'wb')  # 在指定目录下创建文件,注意二进制文件需要用wb模式打开
            attachment_files.append(filename)
            att_file.write(data)  # 保存附件
            att_file.close()
    return attachment_files


# 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3()
# server = poplib.POP3_SSL(pop3_server)
server = poplib.POP3(pop3_server)
server.set_debuglevel(1)
# 打印POP3服务器的欢迎文字:
print(server.getwelcome().decode('utf-8'))
# 身份认证:
server.user(email)
server.pass_(password)
# 返回邮件数量和占用空间:
print('Messages: %s. Size: %s' % server.stat())
# # list()返回所有邮件的编号:
# resp, mails, octets = server.list()
# # 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
# print(mails)
# index = len(mails)
index,_ = server.stat()
for i in range(index, 0, -1):
    # 倒序遍历邮件
    resp, lines, octets = server.retr(i)
    # lines存储了邮件的原始文本的每一行,
    # 邮件的原始文本:
    msg_content = b'\r\n'.join(lines).decode('utf-8')
    # 解析邮件:
    msg = Parser().parsestr(msg_content)
    # print(decode_str(msg["subject"]))
    # 获取邮件时间
    date1 = time.strptime(msg.get("Date")[0:24],
                          '%a, %d %b %Y %H:%M:%S')  # 格式化收件时间
    date2 = time.strftime("%Y%m%d", date1)  # 邮件时间格式转换
    if (date2 <='20200607') & (date2 > '20200519'):
        print("正在获取附件中")
        f_list = get_att(msg)  # 获取附件
    else:
        break

    # print_info(msg)

server.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/271208
推荐阅读
相关标签
  

闽ICP备14008679号