你好,我是goldsun,一个喜欢敲代码时那种感觉的普通大学生。
让我们加油,为了更美好的明天而战!
简单说明
在当前的时代,发送接收邮件已经非常普及,很多时候我们都需要使用邮箱来做一些事情,当然其中可能会包括一些重复的固定事情,或者你想给某个人每天发送固定的一些信息,比如每天早上给喜欢的人发一个早安并附上当天的天气预报提醒,这个时候因为事情比较小所以可能会忘也比较麻烦需要每次重复操作,这个时候便体现出了自动发送邮件的重要性。
本文内容为每天抓取天气预报给固定邮箱发送,对于抓取天气预报有问题的大家可以看我之前的一篇博客:《爬取最近七天的天气情况并实现语言播报-Python综合实战》,大家改成只发当天的就好~
实现思路
我们应该每个人都使用过邮箱,发送一篇邮件的大致过程如下:
使用Python发送邮件依然是实现这几个流程即可,不过所有的过程均使用程序来实现,而对于每天固定时间发送的话,大致有两个方法比较好,一种是让你的程序放在你自己的服务器上,定时运行即可,当然这个可能需要氪一点金,不过也可以采用另一种方法,让你程序所在的电脑定时运行此程序即可,这个后文会有介绍。
实现过程
在Python中有两个主要和邮件发送相关的模块,分别为:
-
smtplib
- 这个模块是关于SMTP(简单邮件传输协议) 的操作模块,在发送邮件的过程中使用这个模块来建立和你发送邮件的账户(是发送账户不是接收账户)的服务器的通信。
-
email
- 上面的那个模块是主要负责建立通信关系,而这个模块是用来编辑添加各种需要发送的内容,比如编辑正文添加附件等等。
开通邮箱的SMTP功能
我们要在不登陆邮箱的情况下跟邮箱建立通信关系就需要在你的邮箱中开通此SMTP功能,只有开通了它,服务器那边才会可以跟你建立通信关系,开通这个功能很简单,首先登录邮箱(以我的163邮箱账户为例,不同的邮箱可能不太一样):
如上图为登录邮箱后的界面,然后依次先点击设置,然后点击图中红圈内的POP3/SMTP/IMAP,之后会出如下界面:
看到图中红框内的两个服务,都给打开就行了,需要发送一下短信即可,记得服务器会给你一串密匙,一定要给记住,其余按照步骤来就行。
到此我们的环境准备就完成了,非常简单,而那两个涉及到的模块都是Python环境内置的,也不需要额外安装,接下来就动手发一封邮箱吧。
实现步骤
如上图是在准备发送邮件时的模板,其中有各种功能,我们依次来介绍一下相关的功能实现方法。
我的实现是使用我的163邮箱给我的QQ邮箱发送一封邮件。
- 最初导入需要的库
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
- 首先,设置初始化信息
#设置登录的服务器信息
email_host = 'stmp.163.com' #这说明我们要跟163邮箱服务器建立通信
#设置登录邮箱的用户名和密匙
email_user = 'gXXXn'
email_pass = 'XXXXXX' #此为服务器给的密匙而不是你的登录密码
#发送邮件的账户
sender = 'gXXXn@163.com'
#接收邮件的账户
receivers = ['2XXX4@qq.com','8XXX5@qq.com']#可以为列表也就是可以直接群送给多个用户
- 接下来,邮件基础内容设置:
#先创建一个MIMEMultipart类,这个对象就相当于一封邮件,用来处理正文及附件
message = MIMEMultipart()
#设置发送方
message['From'] = sender
#设置接收方
message['To'] = ':'.join(receivers)#这个也就相当于收件人输入框内的信息,我们知道各邮箱直接用冒号隔开
#设置主题,也就是邮件大标题
message['Subject'] = '测试邮件'
- 邮件正文设置
对于正文你可以选择两种格式,一种是正常的文本形式,或者选择比较灵活优雅的html格式。
下面给出两种方式的实现方法:
#文本形式
content = '你好,我是goldsun,这是一封测试邮件。'
article = MIMEText(content,'plain','utf-8')
#html形式,假设现在有一个html文档
#首先读取其内容
with open('goldsun.html','r') as f:
content = f.read()
article = MIMEText(content,'html','utf-8')
好了,这就是两种正文的实现方法,记得在发邮件的时候只能选一种哦~也就是两个’article’选其一。
- 邮件附件添加
下面给出添加附件的方法,假设我们添加两个附件,一个是文本附件,另一个是图片附件。注意附件和正文不一样,正文是完全的文本,附件是一个文件。(添加其它类型附件类似)
#添加一个文本附件
with open('words.txt','r') as g:
content1 = g.read()
part1 = MIMEText(content1,'plain','utf-8')
#设置类型
part1['Content-Type'] = 'application/octet-stream'
part1['Content-Disposition'] = 'attachment;filename="words.txt"'
#添加一个图片附件
with open('pic.png','rb') as h:
picture = MIMEImage(h.read())
#设置类型
picture['Content-Type'] = 'application/octet-stream'
picture['Content-Disposition'] = 'attachment;filename="pic.png"'
- 将设置好的所有内容添加到邮件中
经过上面一系列操作,我们已经设置好了标题,收件人,正文,附件等各个部分,接下来汇总添加到邮件中。
message.attach(article)
message.attach(part1)
message.attach(picture)
- 登陆服务器并发送邮件
所有工作准备就绪,现在和服务器间建立通信并发送邮件。
try:
smtpobj = smtplib.SMTP()
smtpobj.connect(email_host,25)
smtpobj.login(email_user,email_pass)
smtpobj.sendmail(sender,receiver,message.as_string())
print('邮件发送成功!')
except:
print('邮件发送失败!')
到这里,你的邮件就已经发出去了,可以静静的等着喜欢的人回消息啦~
本文前面这些只是介绍了相关方法,如果需要发送特定信息就需要大家结合起来使用喽,比如把先爬取好的天气信息放进正文里等等,根据需求大家可以自行创新哦。
设置电脑自动发送
在我们的电脑中有一个任务计划程序,使用它我们就可以方便的在电脑开启的时候自动遵循设定做该做的事了,就像一个后台进程一样,不需要我们操作,到了设定时间它会自己自动操作的,比较方便,我们只需要将自己的程序写好,让它到点自动运行程序即可。
- 首先打开这个程序,在电脑的搜索框搜索或者自己去控制面板程序中找都可以,打开后界面如下:
在使用的过程中,首先你需要看好你的程序所在位置,假如程序在D盘根目录下,名字为sendemail.py。
- 第一步
创建一个后缀名为.bat
的文件,内容只有一行:
python sendemail.py
创建的时候可以先用文本文件,然后编辑完之后把后缀名改成.bat
即可。我们先假设这个文件为 file.bat。
- 第二步
打开任务计划程序并点击创建基本任务
名称和描述随便填一下
触发器根据需求自己选择,可以分别看一下相应的作用
操作选择启动程序
然后到了如下界面:
按照图中填入信息即可,注意我们在起始框已经填了D盘根目录,所有就不需要点浏览选择文件了,不然浏览选择的文件会自动加上路径,就会重复,当然你也可以不填起始框直接浏览选择文件即可,然后确认完成即可。
END
这样一系列操作下来,我们就完成了所有的操作,感觉怎么样,赶紧去试一试吧。
最后既然都看到这儿了,给本文点个赞吧,谢谢~