使用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")
posted @ 2019-04-05 20:37  ayang818  阅读(689)  评论(0编辑  收藏  举报