发送邮件
发一份简单的邮件
发一份完整的带邮件头的群邮件
自动定时发邮件
自动定时爬取天气预报发送邮件
——————————————————————
发一份简单的邮件
代码结构:
也就是这样:
以QQ邮箱为例发送一封简单的邮件如下:
# 以qq邮箱为例
import smtplib #我们要发送邮件,就需要用到smtplib模块
from email.mime.text import MIMEText #要发送文本内容用email.mime.text模块
#email是个包,包里面有好几个模块,调用包(email)文本模块(mime.text)里的类(MIMEText)可以发文本消息
#服务器,端口
host=‘smtp.qq.com‘
port=465
#我方账户,授权码
username=‘**********@qq.com‘
password=‘***********‘
#对方账户
to_addr=‘*********.com‘
#要发送的内容
moment=‘测试python‘
msg = MIMEText(moment,‘plain‘,‘utf-8‘) #给文本添加属性,让电脑能够识别
#moment是文本内容,type:文本类型,默认为plain(纯文本),文本编码,中文为“utf-8”
server = smtplib.SMTP_SSL(host) #【调用服务器】SMTP(“简单邮件传输协议) 是一个类,调用smtplib模块中的类SMTP赋值给server.
# 如果是加密的话,写成:smtplib.SMTP_SSL(),这里在()里面加上变量host,是由于在3.7 版本以上才是这种写法
server.connect(host, port)
#【设置服务器名称和端口】调用connect(指定的服务器),host指定服务器的域名(服务器地址),port 是“端口”(默认是25)
server.login(username, password)
#【登录你的服务器账户】调用login(登录),username(你的邮箱名),password(授权码)。
server.sendmail(username, to_addr, msg.as_string())
#【发送消息】调用sendmail(发送邮件),sender(发件人,就是你的邮箱名),to_addr(收件人邮箱),,msg指要发送的内容(as_string()是将发送的信息msg变为字符串类型。因为电脑不知道你要发送的信息msg是什么,我们也没有定义。这就需要用到email 模块)
server.quit()
#【退出服务器】调用quit(退出)
#如果你用的是QQ以外的其他邮箱,也可能会出现一种报错。smtplib.SMTPException: No suitable authentication method found
#解决方案是:在登录(login)之前调用starttls()方法就可以了。也就是在代码中加入这样一行:server.starttls()
email 模块:也就是用来写邮件内容的模块。这个内容可以是纯文本、HTML内容、图片、附件等多种形式。
每种形式对应的导入方式是这样的:
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
发一份完整的带邮件头的群邮件
邮件头(header)是这一块区域,包括主题、发件人、收件人等信息如下:
from email.header import Header #1从email包引入Header()方法。Header()是用来构建邮件头的
msg[‘From‘] = Header(‘xxx‘) #2.from收件人邮箱地址
msg[‘To‘] = Header(‘xxx‘) #3.to发件人邮箱地址
msg[‘Subject‘] = Header(‘xxx‘) #4.主题
发一封带有文件头的邮件:
#引用模块
import smtplib #发邮件
from email.mime.text import MIMEText #用于构建内容文本
from email.header import Header #用于构建邮件头
#服务器,端口
host=‘smtp.qq.com‘
port=465
#我方账户,授权码
username=‘********@qq.com‘
password=‘***********‘
#对方账户
to_addr=[‘bn****@live.com‘,‘di******@gmail.com‘] #添加多个账户采用列表形式
#要发送的内容
moment=‘测试python‘
#构建纯文本的邮件内容
msg = MIMEText(moment,‘plain‘,‘utf-8‘)
#构建邮件头
msg[‘From‘] = Header(‘丁丁‘) #2.from来自哪里,指发件人的名称或地址
msg[‘To‘] = Header(‘小可爱‘) #3.to发件人邮箱地址
msg[‘Subject‘] = Header(‘我用python‘) #4.主题
# 开启发信服务
server = smtplib.SMTP_SSL(host)
server.connect(host, port)
# 登录发信邮箱
server.login(username, password)
# 发送邮件
server.sendmail(username, to_addr, msg.as_string())
# 关闭服务器
server.quit()
自动定时发邮件
【定时】+【发邮件】
先看看定时功能实现的方法:
定时模块schedule,安装第三方库 pip install schedule
先看看定时模块使用方法:
1 #定时模块schedule
2 import schedule
3 import time
4 #引入schedule和time
5
6 def job():
7 print("I‘m working...")
8 #定义一个叫job的函数,函数的功能是打印‘I‘m working...‘
9 schedule.every(2).seconds.do(job) #每2s执行一次job()函数
10 schedule.every(10).minutes.do(job) #部署每10分钟执行一次job()函数的任务
11 schedule.every().hour.do(job) #部署每×小时执行一次job()函数的任务
12 schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务
13 schedule.every().monday.do(job) #部署每个星期一执行job()函数的任务
14 schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务
15
16 while True:
17 schedule.run_pending() #检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。
18 time.sleep(1) #让程序按1秒来检查,如果检查太快,会浪费计算机的资源。
19 #16-18都是检查部署的情况,如果任务准备就绪,就开始执行任务。
开始封装邮件,用定时器发送:
#引用模块
import smtplib #发邮件
from email.mime.text import MIMEText #用于构建内容文本
from email.header import Header #用于构建邮件头
import schedule #定时模块
import time #时间模块
def Email(): #定义函数Email(),一旦调用将会执行下面的功能
#服务器,端口
host=‘smtp.qq.com‘
port=465
#我方账户,授权码
username=‘6*******@qq.com‘
password=‘********‘
#对方账户
to_addr=[‘********@live.com‘,‘*********@gmail.com‘] #添加多个账户采用列表形式
#要发送的内容
moment=‘测试定时发送‘
#构建纯文本的邮件内容
msg = MIMEText(moment,‘plain‘,‘utf-8‘)
#构建邮件头
msg[‘From‘] = Header(‘丁丁‘) #2.from来自哪里,指发件人的名称或地址
msg[‘To‘] = Header(‘我的小可爱‘) #3.to发件人邮箱地址
msg[‘Subject‘] = Header(‘我用python‘) #4.主题
try:
# 开启发信服务
server = smtplib.SMTP_SSL(host)
server.connect(host, port)
# 登录发信邮箱
server.login(username, password)
# 发送邮件
server.sendmail(username, to_addr, msg.as_string())
# 关闭服务器
server.quit()
print(‘发送成功‘)
except:
print(‘发送失败‘)
def job(): #定时器
Email()
schedule.every().day.at("7:30").do(job) #每天早上7点半执行一次
while True:
schedule.run_pending() #检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。
time.sleep(1)
#让程序按1秒来检查
自动定时爬取天气预报发送邮件:
【定时】+【发邮件】+【爬虫】
#爬取天气,需要用到爬虫里面requests模块
#引用模块
import smtplib #发邮件
from email.mime.text import MIMEText #用于构建内容文本
from email.header import Header #用于构建邮件头
import schedule #定时模块
import time #时间模块
import requests #请求网页信息模块
from bs4 import BeautifulSoup #用来解析和提取网页中的数据的模块
def weather(): #定义函数
headers={‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (like Gecko) Chrome/75.0.3770.142 Safari/537.36‘}
r=requests.get(‘http://www.weather.com.cn/weather/101281601.shtml‘,headers=headers) #跟网站要数据赋值给r
r.encoding=‘utf-8‘ #重申r的编码为‘utf-8‘
bs=BeautifulSoup(r.text,‘html.parser‘) #解码,‘html.parser‘是解析器
a=bs.find(‘li‘,class_="sky skyid lv1") #提取数据
b=a.find(‘h1‘).text
c=a.find(‘p‘).text
d=a.find(‘p‘,class_="tem").text[-7:]
return‘今天%s\n天气:%s\n温度:%s‘ % (b,c,d)
def Email(weathers): #定义函数Email(),一旦调用将会执行下面的功能,参数为weathers
#服务器,端口
host=‘smtp.qq.com‘
port=465
#我方账户,授权码
username=‘************@qq.com‘
password=‘***********‘
#对方账户
to_addr=[‘******@live.com‘,‘*******@qq.com‘] #添加多个账户采用列表形式
#要发送的内容
moment=weathers
#构建纯文本的邮件内容
msg = MIMEText(moment,‘plain‘,‘utf-8‘)
#构建邮件头
msg[‘From‘] = Header(‘丁丁‘) #2.from来自哪里,指发件人的名称或地址
msg[‘To‘] = Header(‘我的小可爱‘) #3.to发件人邮箱地址
msg[‘Subject‘] = Header(‘天气预报‘) #4.主题
try:
# 开启发信服务
server = smtplib.SMTP_SSL(host)
server.connect(host, port)
# 登录发信邮箱
server.login(username, password)
# 发送邮件
server.sendmail(username, to_addr, msg.as_string())
# 关闭服务器
server.quit()
print(‘发送成功‘)
except:
print(‘发送失败‘)
def job():
weathers=weather() #调用函数weather(),返回的值赋值给weathers
Email(weathers) #调用函数Email(weathers),参数为weathers
schedule.every().day.at("7:30").do(job) #每天早上7点半执行一次
while True:
schedule.run_pending() #检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。
time.sleep(1)
#让程序按1秒来检查
转:https://blog.csdn.net/weixin_45239949/article/details/96617183