2021-09-13

这篇博客介绍了如何使用Python的smtplib库发送邮件,并通过schedule库实现每30分钟自动发送邮件的功能。首先讲解了SMTP协议,然后详细阐述了开启QQ邮箱SMTP授权的步骤,接着展示了创建SMTP对象、编写邮件内容和使用SMTP服务登录并发送邮件的代码。最后,利用schedule库设置定时任务,每30分钟发送一次邮件,并将发送结果记录到日志文件中。
摘要由CSDN通过智能技术生成

1.python实现发送邮件

首先介绍一下邮件发送的SMTP协议:

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python中的smtp实现:

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

Python创建 SMTP 对象语法如下:

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

参数说明:
host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。

port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。

local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。

在码代码之前,要先开启邮箱的授权功能。我使用的QQ,因此以QQ邮箱为例。

  • 第一步,登陆QQ邮箱,进入邮箱设置界面。
  • 第二步,开启SMTP功能。

开启MSTP功能

  • 第三步:获取授权码。
  • 如果是首次开启,您在点击后侧对应的“开启”字样时,会弹出授权码框(如下图)
  • 如果之前开启过,忘记了授权码,则点击下方“生成授权码”链接,使用您的手机号按照提示便可获取。

授权码
使用SMTP服务登录邮箱。

	mailhost='smtp.qq.com'
    account = '714576810@qq.com'
    #获取邮箱账号
    password = 'nblaolbvpurlbdhe'
    qqmail= smtplib.SMTP()
    qqmail.connect(mailhost, 25)
    qqmail.login(account, password)
    # 登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码
    

接下来是写邮件格式和正文内容。

 receiver = '***********************' #接收邮箱
 sender = '**********0@qq.com'  #发送邮箱
 content = "测试"    #邮件内容
 #content=input('请输入邮件正文:')
 #输入你的邮件正文
 message = MIMEText(content, 'plain', 'utf-8')
 message['From'] = '*************0@qq.com'
 message['To'] = 'y*******************'
 subject = "测试"
 message['Subject'] = Header(subject, 'utf-8')
 qqmail.sendmail(sender, receiver, message.as_string())
 # 发送邮件,调用了sendmail()方法,写入三个参数,分别是发件人,收件人,和字符串格式的正文。

2.自动发送

我这里使用的是schedule来实现。
他的语法类型

schedule.every(10).minutes.do(job)       #部署每10分钟执行一次job()函数的任务
10 schedule.every().hour.do(job)            #部署每×小时执行一次job()函数的任务
11 schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务
12 schedule.every().monday.do(job)          #部署每个星期一执行job()函数的任务
13 schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务

使用哪种时间间隔定时,视自己的需求。
设置没间隔30分钟发送代码:

 schedule.every(30).minutes.do(post_mstp)
    while True:
        schedule.run_pending()
        time.sleep(1)

既然设置的是定时的,为了便于查看文件发送的成功质量,可以将发送信息形成日志。

 fo = open("logs.txt", "a")
        fo.write(mytime + "    " + receiver + " 发送成功\n")
        fo.close()

完整代码

import smtplib
#smtplib是python的一个内置库,所以不需要用pip安装
from email.mime.text import MIMEText
from email.header import Header
import datetime
import schedule
import time
 #引入Header和MIMEText模块

def post_mstp():

    mailhost='smtp.qq.com'
    account = '***********0@qq.com'
    #获取邮箱账号
    password = '***********e'
    receiver = '***********n'
    sender = '**********m'
    #获取收件人的邮箱
    content = "测试"
    #content=input('请输入邮件正文:')
    #输入你的邮件正文
    message = MIMEText(content, 'plain', 'utf-8')
    message['From'] = '*********m'
    message['To'] = 'y**************'
    #实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码.
    subject = "测试"
    message['Subject'] = Header(subject, 'utf-8')
    #在等号的右边,是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject']。
    #获取当前时间
    now_time=datetime.datetime.now()
    #日期格式转换
    mytime=now_time.strftime('%y-%m-%d %H:%M')
    try:
        qqmail= smtplib.SMTP()
        qqmail.connect(mailhost, 25)
        qqmail.set_debuglevel(1)
        qqmail.login(account, password)
        # 登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码
        qqmail.sendmail(sender, receiver, message.as_string())
        # 发送邮件,调用了sendmail()方法,写入三个参数,分别是发件人,收件人,和字符串格式的正文。
        fo = open("logs.txt", "a")
        fo.write(mytime + "    " + receiver + " 发送成功\n")
        fo.close()
        #print('邮件发送成功')
    except:
        fo = open("logs.txt", "a")
        fo.write(mytime + "    " + receiver + " 发送失败\n")
        fo.close()
    qqmail.quit()

if __name__ == '__main__':
    schedule.every(30).minutes.do(post_mstp)
    while True:
        schedule.run_pending()
        time.sleep(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值