精华内容
下载资源
问答
  • 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)
    

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

    展开全文
  • 主要为大家详细介绍了python实现批量解析邮件下载附件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • # ******************主程序************************# #参数设置 Download_path = r'C:\Users\1\Desktop\4月关于“为用户创造价值的...sheetname2 = '邮箱接受文件数' old_maildir = 'INBOX' new_maildir = '&X
    # ******************主程序************************#
    
    #参数设置
    Download_path = r'C:\Users\1\Desktop\4月关于“为用户创造价值的思考和理解”的总结报告\aaaa'
    wkb_path = r"C:\Users\1\Desktop\4月关于“为用户创造价值的思考和理解”的总结报告\汇总.xlsx"
    sheetname2 = '邮箱接受文件数'
    old_maildir = 'INBOX'
    new_maildir = '&XfJfUmhj-/&XfJn5ZYFZwllSA-'
    rubbish_maildir = '&XfJfUmhj-/&U4ZT8leDVz5lh072-'
    host = 'imap.263.net'
    post = '143'
    uesr = '***************'
    passwrod = '*************'
    
    #启动imap邮箱服务
    conn = Start_mailbox(host,post,uesr,passwrod)
    '''
    #查看imap邮箱有多少个文件夹,imap不是ut-f8编码,不能自动编译,需自行查看
    try:
        type_, folders = conn.list()
        for i in folders:
            print(i)
    except BaseException as e:
        print("the {0}:{1} no file".format("imap.263.net", 143), e)
    '''
    imap4(conn,old_maildir,new_maildir,Download_path,wkb_path,sheetname2)
    #remove_email(old_maildir,rubbish_maildir)#移动收件箱数据到指定的文件夹中
    #'''
    

    refers
    refers2

    展开全文
  • 该源码是针对特定网站,不是通用代码,但是具有一定的参考性,不想下载可以看我博客有相应的每个部分的代码块 http://blog.csdn.net/henni_719/article/details/60580815
  • python批量下载邮件附件

    万次阅读 多人点赞 2018-08-20 18:16:29
    老板让你调查个情况,你把excel表发出去了,结果反馈回来的邮件有数百之多,如果一个一个的点开保存,肯定要加班了,让 python 来帮忙吧。 02.批量下载 python 提供的 email 包十分好用,功能完备,搞定我们这个...

     

    01.场景

    老板让你调查个情况,你把excel表发出去了,结果反馈回来的邮件有数百之多,如果一个一个的点开保存,肯定要加班了,让 python 来帮忙吧。

    02.批量下载

    python 提供的 email 包十分好用,功能完备,搞定我们这个需求,小菜一碟。

    # 账户信息
    email = 'xxx@chinastock.com.cn'
    password = 'xxx'
    pop3_server = 'mail.xxx.com.cn'
    # 连接到POP3服务器,带SSL的:
    server = poplib.POP3_SSL(pop3_server)
    # 可以打开或关闭调试信息:
    server.set_debuglevel(0)
    # POP3服务器的欢迎文字:
    print(server.getwelcome())
    # 身份认证:
    server.user(email)
    server.pass_(password)
    # stat()返回邮件数量和占用空间:
    msg_count, msg_size = server.stat()
    print('message count:', msg_count)
    print('message size:', msg_size, 'bytes')

    执行上面的代码,如果连接没有问题,那么应该能看到邮箱中邮件个数和邮件的总大小,单位是字节。

    这里先简化处理,不纠结于怎么过滤邮件了,主要考虑把附件下载到本地(收件箱里的全部邮件)。

    for i in range(1, msg_count):
        resp, byte_lines, octets = server.retr(i)
        # 转码
        str_lines = []
        for x in byte_lines:
            str_lines.append(x.decode())
        # 拼接邮件内容
        msg_content = '\n'.join(str_lines)
        # 把邮件内容解析为Message对象
        msg = Parser().parsestr(msg_content)
        headers = get_email_headers(msg)
        attachments = get_email_content(msg, r'E:\py\sendmail\attach')
        # 输出
        print('subject:', headers['Subject'])
        print('from:', headers['From'])
        print('to:', headers['To'])
        if 'cc' in headers:
            print('cc:', headers['Cc'])
        print('date:', headers['Date'])
        print('attachments: ', attachments)
        print('-----------------------------')

    retr() 的参数是个数字,可看成是编号,我们总共有 msg_count 封邮件,遍历这些邮件,解析后,保存附件到本地。

    byte_lines 是个 list,里面的元素是字节,因此,我们需要 decode() 转换一下。用换行符 \n 拼接形成的字符串,作为入参,构造成了Message对象。

    有 Message 对象,我们就可以通过解析这个对象,得到邮件的 header 和 content 了。

    先说 header。

    def get_email_headers(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 = decode_str(value)
                    headers['Subject'] = subject
                if header == 'From':
                    hdr, addr = parseaddr(value)
                    name = 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 = 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 = decode_str(hdr)
                        cc_addr = u'%s <%s>' % (name, addr)
                        cc.append(to_addr)
                    headers['Cc'] = ','.join(cc)
        return headers

    header 是写键值对而已,我们关心的是 From, To, Cc, Subject, Date。Message 对象提供的接口,直接 get() 就好。对于收件人和抄送,可能是多人,要注意转换,decode_str() 函数是为了应对汉字乱码。

    下面的函数 get_email_content() 是用来下载附件的。

    def get_email_content(message, savepath):
        attachments = []
        for part in message.walk():
            filename = part.get_filename()
            if filename:
                filename = 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

    Message 里可能包含多个 MIMEBase,也就是多个 part,每个 part 里都可能有一个附件,message.walk() 遍历这些 part,依次解析。该函数把附件都保存到了 savepath 路径下了,不考虑附件重名的情况了。

    03.小结

    本文以较为简短的代码,展示了如何通过 python 批量下载邮件的附件。如果你有“邮件高度依赖症”,那么这种方法一定会给你提高数倍的工作效率。

    希望能帮到你!

    完整代码:

    # _*_ coding: utf-8 _*_
    
    import poplib
    import email
    import os
    from email.parser import Parser
    from email.header import decode_header
    from email.utils import parseaddr
    
    def decode_str(s):
        value, charset = decode_header(s)[0]
        if charset:
            if charset == 'gb2312':
                charset = 'gb18030'
            value = value.decode(charset)
        return value
    
    def get_email_headers(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 = decode_str(value)
                    headers['Subject'] = subject
                if header == 'From':
                    hdr, addr = parseaddr(value)
                    name = 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 = 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 = decode_str(hdr)
                        cc_addr = u'%s <%s>' % (name, addr)
                        cc.append(to_addr)
                    headers['Cc'] = ','.join(cc)
        return headers
    
    def get_email_content(message, savepath):
        attachments = []
        for part in message.walk():
            filename = part.get_filename()
            if filename:
                filename = 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__':
        # 账户信息
        email = 'xxx@xxx.com.cn'
        password = 'xxx'
        pop3_server = 'xxx.xxx.com.cn'
        # 连接到POP3服务器,带SSL的:
        server = poplib.POP3_SSL(pop3_server)
        # 可以打开或关闭调试信息:
        server.set_debuglevel(0)
        # POP3服务器的欢迎文字:
        print(server.getwelcome())
        # 身份认证:
        server.user(email)
        server.pass_(password)
        # stat()返回邮件数量和占用空间:
        msg_count, msg_size = server.stat()
        print('message count:', msg_count)
        print('message size:', msg_size, 'bytes')
        # b'+OK 237 174238271' list()响应的状态/邮件数量/邮件占用的空间大小
        resp, mails, octets = server.list()
    
        for i in range(1, msg_count):
            resp, byte_lines, octets = server.retr(i)
            # 转码
            str_lines = []
            for x in byte_lines:
                str_lines.append(x.decode())
            # 拼接邮件内容
            msg_content = '\n'.join(str_lines)
            # 把邮件内容解析为Message对象
            msg = Parser().parsestr(msg_content)
            headers = get_email_headers(msg)
            attachments = get_email_content(msg, r'E:\py\sendmail\attach')
    
            print('subject:', headers['Subject'])
            print('from:', headers['From'])
            print('to:', headers['To'])
            if 'cc' in headers:
                print('cc:', headers['Cc'])
            print('date:', headers['Date'])
            print('attachments: ', attachments)
            print('-----------------------------')
    
        server.quit()

    展开全文
  • 批量下载QQ邮箱附件下载完后修改文件重命名 因为工作原因,需要处理QQ邮箱上来自各地网友的投稿附件。数量比较多(上千份),如果手动一个下载非常麻烦。。。 而且有些发来的附件命名也不规范,下载下来之后还需要...
  • '*************' #启动imap邮箱服务 conn = Start_mailbox(host,post,uesr,passwrod) ''' #查看imap邮箱有多少个文件夹,imap不是ut-f8编码,不能自动编译,需自行查看 try: type_, folders = conn.list() for i in ...
    #coding: UTF-8
    
    import imaplib
    import email
    from email.parser import Parser
    import re,os
    import win32gui, win32api, win32com 
    from win32com.client import Dispatch
    
    pattern_uid = re.compile('\d+ \(UID (?P<uid>\d+)\)')
    
    def Start_mailbox(host,post,uesr,passwrod):#启动imap邮箱服务
        try:
            conn = imaplib.IMAP4(host, post)
            conn.login(uesr, passwrod)
            print("[+] Connect to {0}:{1} successfully".format(host, post))
            return conn
        except BaseException as e:
            print("Connect to {0}:{1} failed".format(host, post), e)
    
    def GetTxtName(dir):#获取dir文件下的所有文件名
        listName = []
        for fileName in os.listdir(dir):  
            fileName = os.path.splitext(fileName)[0]
            listName.append(fileName)
        return listName
    
    def get_filename(wkb_path,Download_path,sheetname,From_mail_name_all,From_mail_type):
        os.system('taskkill /IM EXCEL.exe /F')
        xlapp = win32com.client.gencache.EnsureDispatch('Excel.Application')
        xlapp.Visible = 1
        xlapp.DisplayAlerts = False # 关闭警告
        wkb = xlapp.Workbooks.Open(wkb_path)
        wkb_sheet = wkb.Worksheets(sheetname)
        listName = GetTxtName(Download_path)
        #print(listName)
        n=1
        last_row = wkb_sheet.Range('A2').End(-4121).Row
        for i in range(0,len(listName)-3):
            #one_range = 'A' + str(last_row+1+i)
            two_range = 'B' + str(last_row+1+i)
            true_range = 'C' + str(last_row+1+i)
            #print(one_range)
            wkb_sheet.Select()
            #wkb_sheet.Range(one_range).Value = listName[i]
            try:
                wkb_sheet.Range(two_range).Value = From_mail_name_all[i]
                wkb_sheet.Range(true_range).Value = From_mail_type[i]
            except:
                pass
            n=n+1
        wkb.Save()
        wkb.Close()
        xlapp.Quit()
    
    def savefile(filename, data, path):#保存文件方法(保存在path目录下)
        try:
           filepath = path +r'\\'+ filename
           print(filepath)
           f = open(filepath, 'wb')
        except:
            print('filename error')
            f.close()
        f.write(data)
        f.close()
        
    def remove_email(old_maildir,new_maildir):#移动邮箱文件夹
        try:
            conn.select(old_maildir, readonly=False)
            type_, data = conn.search(None,"ALL")
            email_ids = data[0].split()
            for i in range(-1,len(email_ids)-1):
                latest_email_id = email_ids[i]
                resp,data = conn.fetch(latest_email_id,'(UID)')
                match = pattern_uid.match(data[0].decode('utf-8'))
                msg_uid = match.group('uid')
                result = conn.uid('COPY',msg_uid,new_maildir)
                if result[0]=='OK':
                    conn.select(old_maildir, readonly=False)
                    type_,data = conn.search(None,"ALL")
                    mov,data = conn.uid('STORE',msg_uid, '+FLAGS', '(\\Deleted)')
                    conn.expunge()
        except BaseException as e:
            print('fail error:',e)
    
    def remove_email_file(old_maildir,new_maildir,msg_uid):#移动邮箱文件夹
        try:
            conn.select(old_maildir, readonly=False)
            type_, data = conn.search(None,"ALL")
            result = conn.uid('COPY',msg_uid,new_maildir)
            print('copy successful:',msg_uid)
            if result[0]=='OK':
                conn.select(old_maildir, readonly=False)
                type_,data = conn.search(None,"ALL")
                mov,data = conn.uid('STORE',msg_uid, '+FLAGS', '(\\Deleted)')
                conn.expunge()
                print('delect successful:',msg_uid)
        except BaseException as e:
            print('fail error:',e)
              
    def parseHeader(msg):#解析邮件首部,备用方案
        # 发件人
        From_mail = email.utils.parseaddr(msg.get('from'))[1]
        # 收件人
        To_mail = email.utils.parseaddr(msg.get('to'))[1]
        # 抄送人
        Cc_mail = email.utils.parseaddr(msg.get_all('cc'))[1]
        
    def imap4(conn,old_maildir,new_maildir,Download_path,wkb_path,sheetname2):
        # 初始化变量
        list_pattern = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)')
        From_mail_name_all = {}
        From_mail_name_all_list = {}
        
        # Select and search folder
        conn.select(old_maildir, readonly=True)
        type_, data = conn.search(None, "ALL")#ALL参数可以进行修改,类似匹配,假如不想要全部文件,可以进行筛选查询
        
        #获取邮件正文和附件并重命名保存,优先保存附件,没有附件的情况下保存正文(正文大于500字),
        pcount = 1
        mail_list = data[0].split()#传输当前文件夹下的文件给mail_list
        for num in mail_list:
            
            type_, data = conn.fetch(num,'(RFC822)')
            msg = email.message_from_string(data[0][1].decode('utf-8'))#传输邮件全部内容,用email解析
            
            # email解析件内容,获取发件人名称,以@进行截取
            From_mail = email.utils.parseaddr(msg.get('from'))[1]
            From_mail_name = From_mail.split('@')[0]
            print(From_mail_name)
            mail_title,mail_charset = email.header.decode_header(msg.get('Subject'))[0]
            print(mail_title)
            
            # email解析件内容
            for part in msg.walk():
                if not part.is_multipart():
                
                    filename = part.get_filename() #如果是附件,这里就会取出附件的文件名
                    contentType = part.get_content_type()
                    mycode = part.get_content_charset()
                    print(filename)
                    
                    if filename:
                        #保存附件
                        print('下载文件')
                        attach_data = part.get_payload(decode=True)
                        #filename = list_pattern.findall(filename)
                        save_name = From_mail_name + '.docx'#以发件人名称的方式保存为doc的文件
                        savefile(save_name, attach_data, Download_path)
                        From_mail_name_all['EM'] = From_mail_name
                        From_mail_name_all['文件发送方式'] = '附件'
                        From_mail_name_all_list[num] = From_mail_name_all
                        print(From_mail_name_all_list)
                        #下载一个文件之后把这个文件移动到新的邮件文件夹,以便后面遍历for少一些数据。
                        try:
                            resp,data = conn.fetch(num,'(UID)')
                            match = pattern_uid.match(data[0].decode('utf-8'))
                            msg_uid = match.group('uid')
                            print(msg_uid)
                            remove_email_file(old_maildir,new_maildir,msg_uid)
                        except BaseException as e:
                            print("remove email failed", e)
                            
                    elif contentType == 'text/plain' or contentType == 'text/html':
                        print('邮件正文')
                        #保存正文
                        try:
                            data = part.get_payload(decode=True).decode('utf-8')
                            data = re.sub(u"\<br\>\</p\>","\n   ", data)
                            data = re.sub(u"\<br\>","\n", data)
                            data = re.sub(u"\</p\>","  ", data)
                            data = re.sub(u"\<.*?\>","", data)
                            data = re.sub(u"\{.*?\}","", data)
                            data = re.sub(u"\&nbsp;","", data)
                            data = re.sub(u"table\.customTableClassName","", data)
                            data = re.sub(u"职业培训领跑者! 学习是一种信仰!","", data)
                            data = re.sub(u"\[object Object\]","", data)
                            data = re.sub(u"\.customTableClassName td, \.customTableClassName th","", data)
                            #print('邮件正文长度:',len(data))
                            if len(data) <500:#指定邮件内容最小长度。
                                pass
                            else:
                                save_name = From_mail_name + '.txt'
                                savefile(save_name,data.encode('utf-8'),Download_path)
                                From_mail_name_all['EM'] = From_mail_name
                                From_mail_name_all['文件发送方式'] = '邮件文本'
                                From_mail_name_all_list[num] = From_mail_name_all
                                print(From_mail_name_all_list)
                                try:
                                    resp,data = conn.fetch(num,'(UID)')
                                    match = pattern_uid.match(data[0].decode('utf-8'))
                                    msg_uid = match.group('uid')
                                    remove_email_file(old_maildir,new_maildir,msg_uid)
                                except BaseException as e:
                                    print("failed", e)
                                    pass
                                
                        except BaseException as e:
                            print("failed", e)
                            pass
                        
                    else: #From_mail_type.append('其他文件')
                        pass
            print ('</br>')
            print ('\n\n')
            pcount += 1
            
        print(From_mail_name_all_list)
        #get_filename(wkb_path,Download_path,sheetname2,From_mail_name_all,From_mail_type)#向excel中写入统计结果
        conn.close()
        conn.logout()
    
    # ******************主程序************************#
    
    #参数设置
    Download_path = r'C:\Users\1\Desktop\4月关于“为用户创造价值的思考和理解”的总结报告\aaaa'
    wkb_path = r"C:\Users\1\Desktop\4月关于“为用户创造价值的思考和理解”的总结报告\汇总.xlsx"
    sheetname2 = '邮箱接受文件数'
    old_maildir = 'INBOX'
    new_maildir = '&XfJfUmhj-/&XfJn5ZYFZwllSA-'
    rubbish_maildir = '&XfJfUmhj-/&U4ZT8leDVz5lh072-'
    host = 'imap.263.net'
    post = '143'
    uesr = '***************'
    passwrod = '*************'
    
    #启动imap邮箱服务
    conn = Start_mailbox(host,post,uesr,passwrod)
    '''
    #查看imap邮箱有多少个文件夹,imap不是ut-f8编码,不能自动编译,需自行查看
    try:
        type_, folders = conn.list()
        for i in folders:
            print(i)
    except BaseException as e:
        print("the {0}:{1} no file".format("imap.263.net", 143), e)
    '''
    imap4(conn,old_maildir,new_maildir,Download_path,wkb_path,sheetname2)
    #remove_email(old_maildir,rubbish_maildir)#移动收件箱数据到指定的文件夹中
    #'''
    
    展开全文
  • 主要为大家详细介绍了Python3实现带附件的定时发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 1.设置发送邮件邮箱的SMTP服务 https://www.360kuai.com/pc/927b9f8da3555bb70?cota=4&kuai_so=1&tj_url=xz&sign=360_57c3bbd1&refer_scene=so_1 设置步骤时,记住设置的邮箱的独立密码,在以下...
  • 利用python自动发送带附件邮件

    千次阅读 2018-10-31 23:23:23
    利用python自动发送邮件 说道邮件,必须要了解相关的协议。 简单地说,SMTP管‘发’,POP3/IMAP管‘收’。 POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会...
  • python3自动发送邮件并添加附件

    千次阅读 热门讨论 2019-09-25 00:50:29
    将本地报表文件以附件形式添加到邮件发送 设置定时任务 代码 import pymysql import pandas as pd import smtplib from email.header import Header from email.mime.text import MIMEText from email.m...
  • [506]python实现邮件接收、附件下载

    千次阅读 2019-01-25 15:41:27
    发送邮件 SMTP协议 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转...
  • 自动发送邮件可以将常规化得需求自动化,解放双手做更多有意义的事情
  • python实现邮件接收、附件下载操作

    万次阅读 2018-09-04 16:04:55
    1、最近公司需要每天导入一部分数据进系统,导入的数据通过邮件的方式发送到相关邮箱,每天去登陆然后下载相关附件导入比较繁琐,特写一个脚本进行自动下载附件导入,相关代码如下: #!/usr/bin/env python3 # -*-...
  • python利用pop3接收邮件以及下载附件(以163邮箱为例) 1、首先需要引入相关的模块,主要就是两个模块:pop3(接收邮件)和email(解析邮件内容) # POP3(Post Office Protocol 3),即邮局协议的第3个版本, #...
  • 在进行一次培训后,需要收到学员提交的邮件信息,但是由于人员较多,而且每次点开文件保存到当地步骤较为繁琐,人为操作浪费时间还存在着操作失误的可能性,这样就产生进行批量的邮件附件的提取并保存在本地的需求...
  • 在收到很多人发的邮件时,一个一个的接收附件比较麻烦,考虑使用python实现指定日期邮件附件下载 首先需要开启邮箱的pop协议,一般在设置里,以QQ邮箱为例,设置后会给个密码,这个就是程序访问邮箱的登录密码 ...
  • linux下基于python自动定时发送邮件附件 每天晚上要给她发送一个当天的报表;每天?excuse me?每天?开什么国际玩笑。每天干同一个工作,这要不给整成auto的。今天果断研究了下自动发送邮件。 原理不懂,只实现功能...
  • Python自动发送邮件并添加附件的源代码,真特定网站,比较具有参考价值
  • Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件邮件
  • 发送邮件2.1 导入email/smtplib相关模块2.2 email模块2.2.1 邮箱设置2.2.2 添加正文2.2.3 添加图片文件2.2.4 添加doc文件2.2.5 添加pdf文件2.2.6 添加表格文件2.3 smtplib模块3. 定时任务3.1 schedule库3.2 定时...
  • Python使用QQ邮箱,实现自动发送邮件

    千次阅读 2020-05-20 18:17:44
    最近用到Python自动发送邮件,主要就是三步,登录邮件、写邮件内容、发送,用到的库是 smtplib 和 email,直接使用pip安装即可 我使用的是QQ邮箱,首先需要设置QQ邮箱POP3/SMTP服务 记住这个授权码,这个...
  • 1、最近公司实现部分数据统计、分析的报表进行每天定时发送到相关人员的邮箱之中的配置代码被人为删除了,需要重新恢复该功能,由于原先是在linux上使用shell配置发送,实在是太繁琐,所以准备使用python来实现该...
  • 腾讯企业邮箱自动发送邮件时,先在客户端,开启SMTP服务,并且设置独立密码作为STMP登录密码。 ...邮箱绑定–>...自动邮件,实例讲解 from email.header import Header from email.mime.multipar.
  • 0x01:由于业务需要用到这个功能,所以顺便简单讲下如何使用python实现。 整个流程如下所示: 登录->写邮件->发送 下面以使用qq邮箱发送为例: 首先需要再qq邮箱里面设置好SMTP这个发件功能以及授权码。 ...
  • 1.新建py脚本,sendmail.py import smtplib from email.header import Header from email.mime.multipart import MIMEMultipart ...# 创建一个带附件邮件实例 message=MIMEMultipart() # 邮件的其...
  • 本文实例为大家分享了python自动发送报警监控邮件 的具体代码,供大家参考,具体内容如下 因为有一些日常任务需要每日检查日否执行正确,所以需要一个报警监控的机制,这个需要你指定你发送的邮箱和你接收的邮箱,就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,089
精华内容 2,435
关键字:

python自动下载邮箱附件

python 订阅