python3发送邮件_python3学习发送邮件smtplib,email,邮件头header,定时器schedule,爬虫requests...

发送邮件发一份简单的邮件发一份完整的带邮件头的群邮件自动定时发邮件自动定时爬取天气预报发送邮件

——————————————————————发一份简单的邮件

代码结构:

178838323_1_20191225094035753

也就是这样:

178838323_2_20191225094036488

以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内容、图片、附件等多种形式。

178838323_3_2019122509403750

每种形式对应的导入方式是这样的: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

先看看定时模块使用方法:#定时模块schedule

import schedule

import time

#引入schedule和time

def job():

print("I'm working...")

#定义一个叫job的函数,函数的功能是打印'I'm working...'

schedule.every(2).seconds.do(job) #每2s执行一次job()函数

schedule.every(10).minutes.do(job) #部署每10分钟执行一次job()函数的任务

schedule.every().hour.do(job) #部署每×小时执行一次job()函数的任务

schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务

schedule.every().monday.do(job) #部署每个星期一执行job()函数的任务

schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务

while True:

schedule.run_pending() #检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。

time.sleep(1) #让程序按1秒来检查,如果检查太快,会浪费计算机的资源。

#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秒来检查

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值