• 自动下载邮件_指定邮件


    一、说明:

    在工作中有时需要去邮箱中下载邮件。然后在做处理。

    每天都下载比较麻烦,所以要使用写个python脚本。

    完成对指定文件的下载。

    python版本:3.7

    编辑器:Pycharm

    二、需求

    需求说明:

    日期:今天(也就是2020-03-18)

    邮件中的附件名称:ceshi2

    也可以理解为下载今天最后一个带有"ceshi"字符串的附件的邮件。

    三、代码

    qq邮箱密码:不是qq密码,不是QQ邮箱的独立密码,而是QQ邮箱的授权码。

     四、代码展示

    #encoding=utf-8
    import poplib
    import timei
    mport
    email from email.parser import Parser from email.header import decode_header import datetime # 输入邮件地址, 口令和POP3服务器地址: mail_config= ['1234556***@qq.com', '*******'] email_add=mail_config[0] password=mail_config[1] # 不是qq密码,也不是邮箱的独立密码,而是POP3的授权码 pop3_server='pop.qq.com' poplib._MAXLINE = 2048000000 def get_email_file(everyday): ## 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3() server = poplib.POP3_SSL(pop3_server) server.set_debuglevel(1) # 打印POP3服务器的欢迎文字: print(server.getwelcome().decode('utf-8')) # 身份认证: server.user(email_add) server.pass_(password) # 返回邮件数量和占用空间: print('Messages: %s. Size: %s' % server.stat()) # list()返回所有邮件的编号: resp, mails, octets = server.list() # 可以查看返回的列表类似[b'1 82923', b'2 2184', ...] # print(mails) # print('server.list:', server.list()) index = len(mails) for i in range(index, 0, -1): # 倒序遍历邮件 # try: print(i,'*'*10) # if i<199:break resp, lines, octets = server.retr(i) # print('server.retr(i):', server.retr(i)) # print(lines) # lines存储了邮件的原始文本的每一行, # 邮件的原始文本: msg_content = b' '.join(lines).decode('utf-8') # print('msg_content:', msg_content) # 解析邮件: msg = Parser().parsestr(msg_content) # 获取邮件时间 date1 = time.strptime(msg.get("Date")[0:24], '%a, %d %b %Y %H:%M:%S') # 格式化收件时间 date2 = time.strftime("%Y-%m-%d", date1) # 邮件时间格式转换 the_date=time.strftime("%Y-%m-%d %H%M%S", date1) print(everyday,' ',date2) if (date2 < everyday) : print("以下日期附件已经下载,不再执行下载任务"+"="*10) # continue break if get_att(the_date,msg): # 获取附件; break # 当拿到指定文件时(当有多个时,为最后一个发送的文件),便终止程序 server.quit() def get_att(the_date,msg): attachment_files = [] for part in msg.walk(): file_name = part.get_filename() # 获取附件名称类型 contType = part.get_content_type() # print('contType:', contType) 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])) # 将附件名称可读化 print(filename) # filename = filename.encode("utf-8") if 'ceshi' in filename : # 判读是否是所需邮件的附件 data = part.get_payload(decode=True) # 下载附件 filename = '测试'+the_date+'.xlsx' #修改下载文件名称,可以指定中文,如不修改不指定值 att_file = open('D:\a\' + filename, 'wb') # 在指定目录下创建文件,注意二进制文件需要用wb模式打开 attachment_files.append(filename) att_file.write(data) # 保存附件 att_file.close() return attachment_files def decode_str(s): # 字符编码转换 value, charset = decode_header(s)[0] if charset: value = value.decode(charset) return value if __name__ == "__main__": today=datetime.date.today() yesterday = today - datetime.timedelta(days=0) everyday=datetime.date.strftime(yesterday, "%Y-%m-%d") get_email_file(everyday)

    五、结果展示

    5.1 当拿到ceshi2的时候就终止了密码。

    5.2 下载展示:

    六、进一步处理

    6.1 代码稍加修改可以完成整天的附件下载

    6.2 下载下来的邮件可以用python在读取,上传到数据库。

  • 相关阅读:
    python基础--模块&包
    服务启动项 Start类型详解
    安全测试
    Dos命令之Netsh
    句柄(Handle)
    共享内存(shared memory)
    linux下查找文件、排序、查看文件内容
    Http协议详解
    Eclipse中搭建Python开发环境
    批处理[Batch]
  • 原文地址:https://www.cnblogs.com/qianslup/p/12519514.html
Copyright © 2020-2023  润新知