精华内容
下载资源
问答
  • 主要为大家详细介绍了python实现批量解析邮件下载附件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了python+POP3实现批量下载邮件附件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python 登陆邮箱下载邮件附件

    千次阅读 2019-10-22 20:42:39
    最近有一个比较特殊的需求,有一个业务每日会产生大量报表,该业务并未给出拿取报表数据的接口,每天报表会发送到一个邮箱中以附件发送,但每日的邮件过多,需要自己登陆邮箱一个一个附件下载下来比较繁琐,现在要写...

    参考帖子:https://blog.csdn.net/u012209894/article/details/82384987

    最近有一个比较特殊的需求,有一个业务每日会产生大量报表,该业务并未给出拿取报表数据的接口,每天报表会发送到一个邮箱中以附件发送,但每日的邮件过多,需要自己登陆邮箱一个一个附件下载下来比较繁琐,现在要写个脚本去拿这些附件,然后再分析里面的数据。

        def decode_str(self, str_in):
            value, charset = decode_header(str_in)[0]
            if charset:
                value = value.decode(charset)
            return value
    
        def get_att(self, msg_in, str_day_in):
            # import email
            attachment_files = []
            for part in msg_in.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 = self.decode_str(str(filename, dh[0][1]))
                        print(filename)
                        # filename = filename.encode("utf-8")
                    # 下载附件
                    data = part.get_payload(decode=True)
                    # 在指定目录下创建文件,注意二进制文件需要用wb模式打开
                    att_file = open('E:\\load_bi\\' + str_day_in + '\\' + filename, 'wb')
                    attachment_files.append(filename)
                    att_file.write(data)  # 保存附件
                    att_file.close()
            return attachment_files
    
        def decode_str(self, s):
            value, charset = decode_header(s)[0]
            if charset:
                if charset != 'utf8':
                    charset = 'utf8'
                value = value.decode(charset)
            return value
    
        def get_email_headers(self, msg):
            headers = {}
            for header in ['From', 'To', 'Cc', 'Subject', 'Date']:
                value = msg.get(header, '')
                if value:
                    if header == 'Date':
                        headers['Date'] = value
                    if header == 'Subject':
                        subject = self.decode_str(value)
                        headers['Subject'] = subject
                    if header == 'From':
                        hdr, addr = parseaddr(value)
                        name = self.decode_str(hdr)
                        from_addr = u'%s <%s>' % (name, addr)
                        headers['From'] = from_addr
                    if header == 'To':
                        all_cc = value.split(',')
                        to = []
                        for x in all_cc:
                            hdr, addr = parseaddr(x)
                            name = self.decode_str(hdr)
                            to_addr = u'%s <%s>' % (name, addr)
                            to.append(to_addr)
                        headers['To'] = ','.join(to)
                    if header == 'Cc':
                        all_cc = value.split(',')
                        cc = []
                        for x in all_cc:
                            hdr, addr = parseaddr(x)
                            name = self.decode_str(hdr)
                            cc_addr = u'%s <%s>' % (name, addr)
                            cc.append(to_addr)
                        headers['Cc'] = ','.join(cc)
            return headers
    
        def guess_charset(self,msg):
            # 先从msg对象获取编码:
            charset = msg.get_charset()
            if charset is None:
                # 如果获取不到,再从Content-Type字段获取:
                content_type = msg.get('Content-Type', '').lower()
                pos = content_type.find('charset=')
                if pos >= 0:
                    charset = content_type[pos + 8:].strip()
            return charset
    
        def get_enclosure(self):
            # 日期赋值
            day = datetime.date.today()
            str_day = str(day).replace('-', '')
    
            self._email = "xxxxxxxx@163.com"
            self._password = "xxxxxx"
    
            #  连接到POP3服务器,带SSL的:
            # self._pop_server = "pop.gmail.com"
            self._pop_server = "pop.163.com"
            telnetlib.Telnet(self._pop_server, 995)
            try:
                server=poplib.POP3_SSL(self._pop_server)
            except:
                time.sleep(5)
                # server = poplib.POP3(self._pop_server,110,timeout=10)
                server=poplib.POP3_SSL(self._pop_server, 995,timeout=10)
            #  可以打开或关闭调试信息:
            server.set_debuglevel(1)
            #  POP3服务器的欢迎文字:
            print(server.getwelcome())
            #  身份认证:
            server.user(self._email)
            server.pass_(self._password)
            #  stat()返回邮件数量和占用空间:
            msg_count,msg_size=server.stat()
            print('message count:',msg_count)
            print('message size:',msg_size,'bytes')
            resp,mails, octets = server.list()
            # 查看邮件长度
            index = len(mails)
            print "邮件总数:{}".format(index)
            for i in range(index, -1, -1):
                # lines存储了邮件的原始文本的每一行,
                resp, lines, octets = server.retr(i)
                # 邮件的原始文本:
                # msg_content = b'\r\n'.join(lines)
                msg_content = '\n'.join(lines)
                # 解析邮件:
                msg = Parser().parsestr(msg_content)
                headers = self.get_email_headers(msg)
                # 获取邮件时间,格式化收件时间
                
                # 邮件时间格式转换
                # date2 = time.strftime("%Y%m%d", date1)
                date2 = headers['Date']
                print date2
                # 获取附件
                self.get_attachment(msg, self._save_path)
                    
    
        def get_attachment(self,message,savepath):
            attachments = []
            for part in message.walk():
                filename = part.get_filename()
                if filename:
                    filename = self.decode_str(filename)
                    data = part.get_payload(decode=True)
                    abs_filename = os.path.join(savepath, filename)
                    attach = open(abs_filename, 'wb')
                    attachments.append(filename)
                    attach.write(data)
                    attach.close()
            return attachments
    
    if __name__ == "__main__":
        get_enclosure()

    遇到的并且待验证问题:

    1、报错pop3 ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

    一开始直接用的 server = poplib.POP3(pop3_server),所以连接偶尔报错上面的信息。

    之后改成指定端口和超时时间之后就不再有报错信息了

    server = poplib.POP3(pop3_server, 110, timeout=10)

    或者 server = poplib.POP3_SSL(pop3_server, 995, timeout=10)

    2、连接上服务器后,用账号密码登陆失败。报错,Error 10061,unable login on.

    这个错误大概率是账号密码错误,请注意163邮箱的,如果开启了客户端授权码功能,登陆的密码应该用授权码!!!

    3.连接服务器后,登陆失败:报错<type 'tuple'>: ('-ERR [AUTH] Username and password not accepted.',)

    这个错误是我登陆gmail时报错的,账号和密码都正确,但登陆依旧报错,因为Google的安全机制比较繁琐,不做特殊设置的话无法登陆。解决办法:

    确认下账号是否开启了二次验证,如果开启了二次验证,则需要设置应用专用密码,使用应用专用密码登陆。

    这个前提是开启了二次验证,开启的流程:https://support.google.com/accounts/answer/185833

    如果没有开启二次验证,但仍然登陆不了,则检查是否开启了允许安全性较低的应用访问的权限,需要开启这个才能登陆

    4。不同的邮箱可能也会导致一些莫名其妙的错误,使用Gmail邮箱,通过api获取邮件发现获取不到整个邮箱中的所有邮件。

    用163邮箱则能够全部获取到,起初以为是因为邮件太多,存在分页,仔细看了官方文档并没有发现分页的方法,后来又用Java写了一套类似的读取邮件的服务,调用Java mail 的api发现依旧无法完全获取,比如我Gmail邮箱中有500+邮件,但用api只能拿到257封,很诡异。查了很久,最后确认应该是Gamil邮箱内部的处理导致,需要对Gmail做设置:

    具体可参考文档:https://mail.google.com/support/bin/answer.py?hl=cn&answer=13291

    如果只是需要下载最近的邮件,可用使用recent:xxxxx@gmail.com的方式,这样就能拿到最近的邮件

    5:部署线上可能会遇到:-ERR [AUTH]  Web login required:http://www.xxxxx.xxxx.xxxxx

    这个错误是因为你的Google账号在新机器上登陆,由于谷歌的安全策略,被认为是不安全的,被Google拒绝了登陆。可用拿Google账号到新机器登陆一次,并信任该机器。或者暂时解除锁定,或者点击下面链接,完成授权。

    https://accounts.google.com/DisplayUnlockCaptcha

     

    展开全文
  • 主要介绍了详解python读取邮件数据并下载附件的实例的相关资料,这里提供实现实例,帮助大家学习理解这部分内容,需要的朋友可以参考下
  • python下载邮件附件

    2021-07-27 21:01:30
    https://blog.csdn.net/kewei168/article/details/84574594
    展开全文
  • python自动下载邮件附件

    千次阅读 2021-03-23 16:04:55
    其中有一项工作的数据源来源于邮件,还需要我自己手动下载,放入指定位置才可以处理!虽然比之前方便了很多,但是还是想更方便些。(自己淘汰自己的路上越走越远o(╥﹏╥)o),于是想着能不能用代码下载,研究了半天...

    作者介绍:目前就职于电商数据分析师,日常工作以爬虫和DBA数据库管理为主,业务场景模型搭建为辅!自16年至今一直从事数据相关工作,从最初的表哥到现在的大数据、数据挖掘、机器学习,一直不断成长!日常活跃于CSDN

    Slogan: 科技成就商业未来,数据看透问题本质
    CSDN:https://blog.csdn.net/qq_35866846
    微信公众号:诡途

    在这里插入图片描述

    一、项目背景

    继上一次的 群聊机器人开发 之后的工作流程再优化,上次研究完群聊机器人之后,开发了三个机器人替我处理表格并自动发出去。其中有一项工作的数据源来源于邮件,还需要我自己手动下载,放入指定位置才可以处理!虽然比之前方便了很多,但是还是想更方便些。(自己淘汰自己的路上越走越远o(╥﹏╥)o),于是想着能不能用代码下载,研究了半天还终于整出来了,而且还是两种方法!

    二、有授权码的场景

    准备工作,QQ邮箱开通授权码流程在这里插入图片描述

    # 导入库——qq邮箱测试,其他邮箱略有差异
    import poplib,email,datetime,time,traceback,sys,telnetlib,zipfile,os,shutil
    from email.parser import Parser
    from email.header import decode_header
    from email.utils import parseaddr
    ​
    # 输入邮件地址, 口令和POP3服务器地址:
    email_user='xxxxxx@qq.com'
    # 此处密码是授权码,用于登录第三方邮件客户端
    password='你自己的授权码'
    pop3_server='pop.qq.com'# 授权码登录邮箱
    def email_login(email_user,password,pop3_server):
        # 连接到POP3服务器,有些邮箱服务器需要ssl加密,可以使用poplib.POP3_SSL
        telnetlib.Telnet('pop.qq.com',995)
        server=poplib.POP3_SSL(pop3_server,995,timeout=10)
    #     server=poplib.POP3(pop3_server,110,timeout=10)
        # 可以打开或关闭调试信息
    #     server.set_debuglevel(1)# 身份认证:
        server.user(email_user)
        server.pass_(password)
        
        # 返回邮件数量和占用空间:
        print('Messages: %s. Size: %s'%server.stat())
        
        # list()返回所有邮件的编号:
        resp,mails,octets = server.list()
        
        return mails,server
        
     def decode_str(str_in):
        """字符编码转换"""
        value, charset = decode_header(str_in)[0]
        if charset:
            value = value.decode(charset)
        return value
       
     def save_att_file(save_path):
        """附件下载函数"""
        for part in msg.walk():
            file_name = part.get_filename()
        #     contentType = part.get_content_type()
            attachment_files =[]
            if file_name:
                file_name = decode_str(file_name)
                data =  part.get_payload(decode=True)
                att_file = open(os.path.join(save_path,file_name), 'wb')
                attachment_files.append(file_name)
                att_file.write(data)
                att_file.close()
                print(f"附件 {file_name} 下载完成")def main(yesterday):
        # 遍历所有邮件
        for i in range(1,len(mails)+1):
            resp,lines,octets = server.retr(i)
            msg_content=b'\r\n'.join(lines).decode()# 解析邮件:
            msg = Parser().parsestr(msg_content)
            From = parseaddr(msg.get('from'))[1]#发件人
            To = parseaddr(msg.get('To'))[1]#收件人
            Cc = parseaddr(msg.get_all('Cc'))[1]#抄送人
            Subject = decode_str(parseaddr(msg.get('Subject'))[1])#主题# 获取邮件时间,格式化收件时间
            date1 = time.strptime(msg.get("Date")[0:24],'%a, %d %b %Y %H:%M:%S')
            # 邮件时间格式转换
            date2 = time.strftime("%Y-%m-%d",date1)print(f'发件人:{From};收件人:{To};抄送人:{Cc};主题:{Subject};收件日期:{date2}')# 主题和日期验证所需邮件
            if ("TM在售" in Subject)&(date2 == yesterday):
                save_att_file(save_path)
          
    # 今天日期
    today = datetime.date.today()
    # 昨天日期
    yesterday = (today - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
    save_path = os.getcwd()# 登录获取邮件列表
    mails,server = email_login(email_user,password,pop3_server)
    
    # 下载主程序
    main(yesterday)
    

    三、无授权码的场景

    鉴于企业邮箱没有给开授权码权限,以及业务流程限制不允许使用私人邮箱,又研究了下直接使用win32com直接驱动outlook客户端

    注:使用前提,本机配置好了outlook,即至少登录过一次,因为我只配置了一个邮箱账户,没有测试多账户情况

    # 导入库
    import win32com.client
    import os
    ​
    def download_email_att(yesterday):
        # 创建outlook客户端链接
        outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")# "6" 是指文件夹的索引,在本例中,表示收件箱。可以把那个号码改成参考号
        inbox = outlook.GetDefaultFolder(6)# 获取收件箱列表
        messages = inbox.Items
        # # 获取当前最新邮件
        # message = messages.GetFirst()
        # # 获取邮件主题
        # subject = message.Subject
        # # 获取邮件正文
        # body = message.Body# 倒序读取最新30封邮件 ——因为邮件过多,完全遍历耗时过久
        for i in range(len(messages),len(messages)-30,-1):
            message = messages(i)
            subject = message.Subject
            date = message.senton.date()
        #     print(subject,date)
            if ("TM在售" in subject)&(str(date) == yesterday):
        #         print(subject,date)
                # 获取附件信息
                attachments = message.Attachments
                num_attach = len([x for x in attachments])
                for x in range(1, num_attach + 1):
                    attachment = attachments.Item(x)
                    # 保存附件到save_path下
                    attachment.SaveASFile(os.path.join(save_path, attachment.FileName))
                    print(f"附件 {attachment}下载完成")
                break  # 找到指定邮件打断循环# 今天日期
    today = datetime.date.today()
    # 昨天日期
    yesterday = (today - datetime.timedelta(days=1)).strftime('%Y-%m-%d')            
    # 附件保存路径
    save_path = os.getcwd()
    download_email_att(yesterday)
    

    科技成就商业未来,数据看透问题本质!
    我是诡途,感谢阅读,欢迎转发分享点赞!
    文章仅供学习交流,转载请注明来源!

    展开全文
  • #filename = filename.encode("utf-8") if 'xls' in filename: data = part.get_payload(decode=True)#下载附件 att_file = open('E:\\zjzj\\wenjian\\' + filename, 'wb')#在指定目录下创建文件,注意二进制文件...
    
    
    import poplib 
    import email 
    import datetime 
    import time 
    import os 
    #import xlrd 
    #import xlwt
    import shutil
    from email.parser import Parser 
    from email.header import decode_header 
    from email.utils import parseaddr 
    import smtplib as sm
    import email.mime.multipart 
    import email.mime.text 
    import time
    import datetime
    from email.mime.application import MIMEApplication 
    from email import encoders
    from email.mime.base import MIMEBase
    from email.mime.text import MIMEText
    
    
    yesterday = datetime.date.today() - datetime.timedelta(days=1)
    m=yesterday.strftime("%Y%m%d")
    msg=email.mime.multipart.MIMEMultipart()  
    
    shutil.rmtree('E:\\zjzj\\wenjian\\')
    os.mkdir('E:\\zjzj\\wenjian\\')  
      
    # 输入邮件地址, 口令和POP3服务器地址: 
    email = 'aaa@qq.com'
    password = '*************'
    pop3_server = 'imap.exmail.qq.com'
      
      
      
    def decode_str(s):#字符编码转换 
      value, charset = decode_header(s)[0] 
      if charset: 
        value = value.decode(charset) 
      return value 
      
      
    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]))#将附件名称可读化 
            print(filename) 
            #filename = filename.encode("utf-8")
          if 'xls' in filename:
            data = part.get_payload(decode=True)#下载附件 
            att_file = open('E:\\zjzj\\wenjian\\' + filename, 'wb')#在指定目录下创建文件,注意二进制文件需要用wb模式打开 
            attachment_files.append(filename) 
            att_file.write(data)#保存附件 
            att_file.close() 
          return attachment_files 
      
    
    def get_email_headers(msg):
      # 邮件的From, To, Subject存在于根对象上:
      headers = {}
      for header in ['From', 'To', 'Subject', 'Date']:
        value = msg.get(header, '')
        if value:
          if header == 'Date':
            headers['date'] = value
          if header == 'Subject':
            # 需要解码Subject字符串:
            subject = decode_str(value)
            headers['subject'] = subject
          else:
            # 需要解码Email地址:
            hdr, addr = parseaddr(value)
            name = decode_str(hdr)
            value = u'%s <%s>' % (name, addr)
            if header == 'From':
              from_address = value
              headers['from'] = from_address
            else:
              to_address = value
              headers['to'] = to_address
      content_type = msg.get_content_type()
      print ('head content_type: ', content_type)
      return headers      
    
    
            
    # 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3() 
    server = poplib.POP3_SSL(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) 
      
      
      
    for i in range(index,0,-1): 
      #倒序遍历邮件 
      resp, lines, octets = server.retr(i) 
      # lines存储了邮件的原始文本的每一行, 
      #邮件的原始文本: 
      msg_content = b'\r\n'.join(lines).decode('utf-8',"ignore") 
      #解析邮件: 
      msg = Parser().parsestr(msg_content) 
    
      #message = email.message_from_string(filename.decode("utf-8"))
      #sender = email.utils.parseaddr(message.get('from'))[1]
      #获取邮件时间 
      date1 = time.strptime(msg.get("Date")[0:24],'%a, %d %b %Y %H:%M:%S') #格式化收件时间 
      date2 = time.strftime("%Y%m%d", date1)#邮件时间格式转换 
    
      if date2 < m:
          continue
    
     
          print(msg)
      f_list = get_att(msg)#获取附件 
        
          
        
    
    server.quit()
    
    展开全文
  • # ******************主程序************************# #参数设置 Download_path = r'C:\Users\1\Desktop\4月关于“为用户创造价值的...sheetname2 = '邮箱接受文件数' old_maildir = 'INBOX' new_maildir = '&X
  • [506]python实现邮件接收、附件下载

    千次阅读 2019-01-25 15:41:27
    发送邮件 SMTP协议 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转...
  • 主要为大家详细介绍了python3通过qq邮箱发送邮件以及附件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python批量下载邮件附件

    万次阅读 多人点赞 2018-08-20 18:16:29
    老板让你调查个情况,你把excel表发出去了,结果反馈回来的邮件有数百之多,如果一个一个的点开保存,肯定要加班了,让 python 来帮忙吧。 02.批量下载 python 提供的 email 包十分好用,功能完备,搞定我们这个...
  • 主要为大家详细介绍了Python3实现发送QQ邮件功能,附件方面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了Python实现读取邮箱中的邮件功能,可读取邮件文本及附件的功能,涉及Python针对邮件的获取、分析、保存等相关操作技巧,需要的朋友可以参考下
  • python发送带附件邮件代码,大家可以看看哟。亲测无问题。
  • 批量下载QQ邮箱附件下载完后修改文件重命名 因为工作原因,需要处理QQ邮箱上来自各地网友的投稿附件。数量比较多(上千份),如果手动一个下载非常麻烦。。。 而且有些发来的附件命名也不规范,下载下来之后还需要...
  • 使用python3自带的库实现邮件发送,包括主题、附件等,可直接使用
  • python3下载邮件附件

    千次阅读 2018-11-27 22:08:13
    python3下载.eml文件的附件 最近经常干的一件事就是面对几十个的.eml文件,逐个打开并下载附件,今天突发奇想,人生苦短,快用python,那么为啥这种重复性的工作不用python替代呢,说干就干 环境配置 python3(pip ...
  • python实现邮件接收、附件下载操作

    万次阅读 2018-09-04 16:04:55
    1、最近公司需要每天导入一部分数据进系统,导入的数据通过邮件的方式发送到相关邮箱,每天去登陆然后下载相关附件导入比较繁琐,特写一个脚本进行自动下载附件导入,相关代码如下: #!/usr/bin/env python3 # -*-...
  • 该源码是针对特定网站,不是通用代码,但是具有一定的参考性,不想下载可以看我博客有相应的每个部分的代码块 http://blog.csdn.net/henni_719/article/details/60580815
  • python利用pop3接收邮件以及下载附件(以163邮箱为例) 1、首先需要引入相关的模块,主要就是两个模块:pop3(接收邮件)和email(解析邮件内容) # POP3(Post Office Protocol 3),即邮局协议的第3个版本, #...
  • 主要为大家详细介绍了Python3使用SMTP发送带附件邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了python3实现带多张图片、附件邮件发送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • How do i add a document attachment when sending an email with python ?i get the email to send(please ignore: i am looping the email to send every 5 seconds, only for testing purposes, i want it to sen...
  • 主要为大家详细介绍了Python3实现带附件的定时发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python 获取邮箱附件

    千次阅读 2019-07-09 15:43:05
    邮件标题> 代码里有个base_save_path是附件存放的目录,可以改成其它路径。 getMail.py代码: #!/usr/bin/python2.7 # _*_ coding: utf-8 _*_ import poplib import email import sys from ...
  • 由于我经常需要备份文件夹下的内容到邮件里面,每个打开邮件,上传文件,发送,太过麻烦,其实每次发送的文件都是放在固定 置的,只是邮件标题不同而已,于是用 python 为自己写了个发送文件到邮箱的小工具,在任意...
  •  1、使用Python发Text 邮件 import smtplib # 发送字符串的邮件 from email.mime.text import MIMEText # 设置服务器所需信息 fromEmailAddr = '发件人邮箱地址' # 邮件发送方邮箱地址 password = 'email password...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,257
精华内容 4,502
关键字:

python下载邮箱附件

python 订阅