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

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

    展开全文
  • # ******************主程序************************# #参数设置 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

    展开全文
  • 1.设置发送邮件邮箱的SMTP服务https://www.360kuai.com/pc/927b9f8da3555bb70?cota=4&kuai_so=1&tj_url=xz&sign=360_57c3bbd1&refer_scene=so_1设置步骤时,记住设置的邮箱的独立密码,在以下脚本中能够用到 2....

    1.设置发送邮件邮箱的SMTP服务

    https://www.360kuai.com/pc/927b9f8da3555bb70?cota=4&kuai_so=1&tj_url=xz&sign=360_57c3bbd1&refer_scene=so_1

    设置步骤时,记住设置的邮箱的独立密码,在以下脚本中能够用到

    14a5ef956e18437fba0a9235a1bdb3c3.jpg

    2. python脚本

    import smtplib

    from email.header import Header

    from email.mime.multipart import MIMEMultipart

    from email.mime.text import MIMEText

    # 创建一个带附件的邮件实例

    message=MIMEMultipart()

    # 邮件的其他属性

    message['From'] = ''

    message['Subject'] = Header(u'邮件标题发送成功', 'utf8').encode()

    message['To'] = u''

    # 邮件正文内容

    attr2 = MIMEText('备份详情请查看附件日志', 'plain', 'utf-8')

    message.attach(attr2)

    #构造附件txt附件1

    attr1=MIMEText(open(r'D:\j\run1.txt','rb').read(),'base64','utf-8')

    attr1["content_Type"]='application/octet-stream'

    attr1["Content-Disposition"] = 'attachment; filename="run1.txt"'

    message.attach(attr1)

    xxxxxx

    server = smtplib.SMTP('smtp.163.com', 25)

    server.login('jing@163.com', '填写邮箱独立密码(例123456..)')

    server.sendmail('jing@163.com', ['lu@163.com'],message.as_string())

    print("邮件发送成功")

    3.  确认自己是否有pyhon环境

    在cmd窗口下输入 python,回车后查看是否有相关版本信息,没有的话说明环境变量没有配置或者没有安装python-IDLE

    35de164fee274ccaab6ec4140c6a38c7.jpg

    4.执行python脚本

    312f8c164e184034b701f5f925abaa94.png

    5.登录邮箱,验证是否发送/收到邮件

    247a30b9ea764ef7a687127902fee49e.jpg

    展开全文
  • 目标:设置邮件自动发送本文按照《对比Excel,轻松学习Python数据分析》中第14章自动发送电子邮件实例编写,试验成功,分享代码给大家 #!/usr/bin/env python# coding: utf-8# In[2]:import smtplibfrom email import...

    目标:设置邮件自动发送

    本文按照《对比Excel,轻松学习Python数据分析》中第14章自动发送电子邮件实例编写,试验成功,分享代码给大家

    up-dd60964f35bb94b8bac8900cc65531de6b8.png

    #!/usr/bin/env python

    # coding: utf-8

    # In[2]:

    import smtplib

    from email import encoders

    from email.header import Header

    from email.mime.multipart import MIMEMultipart

    from email.mime.text import MIMEText

    from email.utils import parseaddr,formataddr

    from email.mime.application import MIMEApplication

    # In[3]:

    #发件人邮箱

    asender="18662218699@163.com"

    # In[4]:

    #收件人邮箱

    areceiver="376453131@qq.com"

    # In[5]:

    #抄送人邮件

    acc="xiaoling.song@126.com"

    # In[8]:

    #邮件主题

    asubject="测试邮件"

    # In[18]:

    from_addr="18662218699@163.com"

    # In[9]:

    #邮箱密码(授权码)

    password="RPJVHXLKJBWGADHW"

    # In[10]:

    #邮件设置

    msg=MIMEMultipart()

    msg["Subject"]=asubject

    msg["to"]=areceiver

    msg["cc"]=acc

    msg["from"]="宋小玲"

    # In[11]:

    #邮件正文

    body="你好,这是一份测试邮件"

    # In[12]:

    #添加邮件正文

    msg.attach(MIMEText(body,"plain","utf-8"))

    # In[14]:

    #添加附件

    #注意,这里的文件路径是分隔线

    xlsxpart=MIMEApplication(open('D:/到货情况/生成文件/周报表.xlsx','rb').read())

    xlsxpart.add_header("Content-Disposition","attachment",filename="周报表.xlsx")

    # In[15]:

    msg.attach(xlsxpart)

    # In[22]:

    #设置邮箱服务器地址及端口

    smtp_server="smtp.163.com"

    server=smtplib.SMTP(smtp_server,25)

    server.set_debuglevel(1)

    # In[23]:

    #登录邮箱

    server.login(from_addr,password)

    # In[24]:

    #发送邮件

    server.sendmail(from_addr,areceiver.split(",")+acc.split(","),msg.as_string())

    # In[25]:

    #断开服务器

    server.quit()

    文章来源: www.oschina.net,作者:小玲_001,版权归原作者所有,如需转载,请联系作者。

    原文链接:https://my.oschina.net/u/4493568/blog/3215668

    展开全文
  • 发送邮件SMTP协议SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转...
  • python批量下载邮件附件

    万次阅读 多人点赞 2018-08-20 18:16:29
    老板让你调查个情况,你把excel表发出去了,结果反馈回来的邮件有数百之多,如果一个一个的点开保存,肯定要加班了,让 python 来帮忙吧。 02.批量下载 python 提供的 email 包十分好用,功能完备,搞定我们这个...
  • 详解python实现读取邮件数据并下载附件的实例实现结果图:实现代码:#!/usr/bin/python2.7# _*_ coding: utf-8 _*_"""@Author: MarkLiu"""import poplibimport emailfrom email.parser import Parserfrom email....
  • 利用python自动发送带附件邮件

    千次阅读 2018-10-31 23:23:23
    利用python自动发送邮件 说道邮件,必须要了解相关的协议。 简单地说,SMTP管‘发’,POP3/IMAP管‘收’。 POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会...
  • Python自动发送邮件并添加附件的源代码,真特定网站,比较具有参考价值
  • linux下基于python自动定时发送邮件附件 每天晚上要给她发送一个当天的报表;每天?excuse me?每天?开什么国际玩笑。每天干同一个工作,这要不给整成auto的。今天果断研究了下自动发送邮件。 原理不懂,只实现功能...
  • Python 自动发送邮件在日常工作中可以避免一些重复性的工作,Python 用来发送邮件会涉及到 smtplib 和 Email 两个模块,smtplib 是用来发送邮件用的,Email 是用来构建邮件内容的,接下来我们看看这两个库的使用...
  • 本文实例讲述了Python实现读取邮箱中的邮件功能。分享给大家供大家参考,具体如下:#-*- encoding: utf-8 -*-import sysimport localeimport poplibfrom email import parserimport emailimport string# 确定运行...
  • 1.设置发送邮件邮箱的SMTP服务 https://www.360kuai.com/pc/927b9f8da3555bb70?cota=4&kuai_so=1&tj_url=xz&sign=360_57c3bbd1&refer_scene=so_1 设置步骤时,记住设置的邮箱的独立密码,在以下...
  • 自动发送邮件可以将常规化得需求自动化,解放双手做更多有意义的事情
  • 该源码是针对特定网站,不是通用代码,但是具有一定的参考性,不想下载可以看我博客有相应的每个部分的代码块 http://blog.csdn.net/henni_719/article/details/60580815
  • 这篇文章主要为大家详细介绍了python实现自动收发邮件,代替你问候女友,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下每天工作忙,学会python自动收发邮件,代替你问候女友1、...
  • ### 一般发邮件方法我以前在通过Python实现自动邮件功能的时候是这样的:import smtplibfrom email.mime.text import MIMETextfrom email.header import Header# 发送邮箱服务器smtpserver = 'smtp.sina.com'# ...
  • 每天工作忙,学会python自动收发邮件,代替你问候女友1、相关库介绍1)yagmailYet Another GMAIL/SMTP client;非常方便的SMTP包,超简单的Python发邮件模块;需要单独安装,不包含在Python标准模块里;2)keyring从...
  • 在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景。今天一起来探讨一下,GitHub 的大牛门是...我们以前在通过Python实现自动邮件功能的时候是这样的:python邮件需要掌握两个模块的用法,smtplib和e...
  • linux下基于python自动定时发送邮件附件 暂时接手一个离职前端实习生的工作,昨天第一次对接产品,跟我说每天晚上要给她发送一个当天的报表。 每天?excuse me?每天?开什么国际玩笑。每天干同一个工作,这要不给整...
  • 主要为大家详细介绍了python+POP3实现批量下载邮件附件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 1.新建py脚本,sendmail.py import smtplib from email.header import Header from email.mime.multipart import MIMEMultipart ...# 创建一个带附件邮件实例 message=MIMEMultipart() # 邮件的其...
  • Python自动发送邮件(文本、html、图片、附件) 本文由博主经过查阅网上资料整理总结后编写,如存在错误或不恰当之处请留言以便更正,内容仅供大家参考学习。 Python自动发送邮件 1.开启邮箱SMTP服务 SMTP是发送...
  • python自动发送邮件

    2019-11-26 18:04:03
    每天发日报的你是不是想找个机器人代替你做这些重复性无技术含量的工作,来试试python自动发送邮件吧!

空空如也

空空如也

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

python自动下载邮件附件

python 订阅