• 使用python将信息发送到QQ邮箱


    我们在写爬虫的时候,爬取的信息很多都是每天在变化的,但是要是每天都打开爬虫爬那么一次,就会显得非常不优雅。这个时候我们就可以利用python的email库(书写邮件)或itchat(链接微信库)还有smtplib(简单邮件传输协议库)然后部署到服务器上来,实现程序自动化

    1. 在写代码之前,首先要有一些准备条件,那就是在qq邮箱中打开smtp服务,我用的是QQ邮箱,在设置/账户选项中找到这个字段
      在这里插入图片描述
      打开POP3/SMTP服务,然后我们就可以在第三方发送接收邮件了
    2. 然后我们开始写一个最简单的代码,先实现发送文本邮件这个功能
    import smtplib
    from email.mime.text import MIMEText
    
    #QQ邮箱提供的SMTP服务器
    mail_host = 'smtp.qq.com'
    #服务器端口
    port = 465
    send_by = 'ayang818@qq.com'
    password = '开启SMTP服务后,QQ邮箱自动生成的16位密码'
    send_to = 'ayang818@qq.com'
    
    def send_email(title,content,):
    	#创建了MIMEText类,相当于在写邮件内容,是plain类型
        message = MIMEText(content,'plain','utf-8')
        message["From"] = send_by
        message['To'] = send_to
        message['Subject'] = title
        try:
            #注意第三个参数,设置了转码的格式(我不设的时候会报解码错误)
            smpt = smtplib.SMTP_SSL(mail_host, port, 'utf-8')
            smpt.login(send_by,password)
            smpt.sendmail(send_by, send_to,message.as_string())
            print("发送成功")
        except:
            print("发送失败")
    
    
    title = '测试文件'
    content = '执行自动化单元测试'
    send_email(title,content)
    

    上面的代码是定义了一个send_email函数,并定义了MIMEtext的实例的From,To,Subject三个字段的属性,分别是,发送邮件人邮箱号,接收者邮箱号,标题,然后创建了使用smtplib的SMTP_SSl函数,创建了一个smpt_ssl对象,然后调用类方法login登陆,最后使用sendemail方法发送邮件(携带发送者,接收者,内容三个参数),测试一下。发现可以使用。

    1. 邮件单单只有文本肯定还不够,我们可能需要携带一些附件或者说传输非文本数据(HTML),这个时候我们单单用到MIMEText类就不够了,这个时候我们需要使用其他两个类,一个是MIMEBase,另一个是MIMEMultipart,这三个类的关系是MIMEBase是由基类message.Message继承而来,MIMEMultipart又是继承MIMEBase类,MIMEText又是继承MIMEMultipart类,这三个类的作用可以这么理解,MIMEMultipart相当于是一个容器,他可以使用attach方法加入其他对象,然后MIMEBase类可以理解为携带附件内容的类,代码如下
    import smtplib
    from email.mime.base import MIMEBase
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    
    mail_host = 'smtp.qq.com'
    port = 465
    send_by = 'ayang818@qq.com'
    password = '开启SMTP服务后,QQ邮箱自动生成的16位密码'
    send_to = 'ayang818@qq.com'
    
    def send_email(title,content,fileaddress):
        message = MIMEMultipart()
        message["From"] = send_by
        message['To'] = send_to
        message['Subject'] = title
        message.attach(MIMEText(content,'plain','utf-8'))
        #下面是发送附件类
        try:
            with open(fileaddress,'r',encoding = 'utf-8') as f:
                mime = MIMEBase('text','txt',filename = fileaddress)
                mime.add_header('Content-Disposition','321',filename = fileaddress)
                mime.set_payload(f.read())
                message.attach(mime)
        except:
            pass
        # print(message)
        try:
            #要注意位置参数和关键字参数啊啊
            smpt = smtplib.SMTP_SSL(mail_host, port, 'utf-8')
            smpt.login(send_by,password)
            smpt.sendmail(send_by, send_to,message.as_string(),)
            # print(message.as_string)
            smpt.quit()
            print("发送成功")
        except:
            print("发送失败")
    
    if __name__ == "__main__":
        title = '附件文件测试'
        content = '三体'
        # title:标题 , context:正文 ,第三个参数选填
        send_email(title, content, "D:/三体.txt")
    
  • 相关阅读:
    bzoj 1087: [SCOI2005]互不侵犯King
    左偏树+菲波那切堆
    bzoj 4455: [Zjoi2016]小星星
    luogu P1941 飞扬的小鸟
    luogu P2814 家谱
    平衡树之非旋Treap
    luogu P3147 [USACO16OPEN]262144
    luogu P1854 花店橱窗布置
    计蒜客NOIP2018模拟1
    [BZOJ3456]城市规划(生成函数+多项式求逆+多项式求ln)
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072628.html
Copyright © 2020-2023  润新知