Author:qyan.li
Date:2022.6.3
Topic:借助于smtplib和email实现邮件的自动化发送
Reference:https://zhuanlan.zhihu.com/p/89868804
一、写在前面:
~~~~~~~~
邮件的自动化发送已经是python
构建智能机器人系列功能实现的最后一篇博文,后续会出一篇总领性的文章,来阐述一下系统的总体框架和组织方式,这个系列就已经完成,完整的代码也会在最后文章中给出,需要的同学可以持续关注一下。
~~~~~~~~
参考链接:https://blog.csdn.net/DALEONE/article/details/125197279?spm=1001.2014.3001.5501
~~~~~~~~
本篇博文的目标集中在邮件的自动化发送,与前面音乐自动播放,消息自动发送的实现思想不同,邮件的自动化发送借助于python
邮件操作模块:stmplib
和email
。代码完全借鉴于知乎的一位博主的代码(参考链接已经在Reference
中给出),自己做简单的封装,使其更加适用于我们的项目。
二、系统实现:
~~~~~~~~ 老样子,还是先上代码,方便大家参考借鉴:
import smtplib
# 负责构造文本
from email.mime.text import MIMEText
# 负责将多个对象集合起来
from email.mime.multipart import MIMEMultipart
from email.header import Header
class AutoEmail():
def __init__(self,MailReceiver,SendMail = '2691848674@qq.com'):
self.MailSender = SendMail
self.mm = MIMEMultipart('related')
self.mail_host = "smtp.qq.com"
self.mail_license = "tbhcprdhnghodcij"
self.MailReceiver = MailReceiver
self.ReceiverAddress = ''
def Name2Mail(self,fileName):
with open(fileName,'r',encoding = 'utf-8') as f:
content = f.readlines()
for item in content:
if self.MailReceiver == item.split(' ')[0]:
self.ReceiverAddress = item.split(' ')[1].strip('/n')
return 1
else:
continue
return -1
def MailContent(self,subjectContent,bodyContent):
# 邮件主题
subject_content = subjectContent
# 设置发送者,注意严格遵守格式,里面邮箱为发件人邮箱
self.mm["From"] = "sender_name<" + self.MailSender + ">"
# 设置接受者,注意严格遵守格式,里面邮箱为接受者邮箱
self.mm["To"] = "receiver_1_name<" + self.ReceiverAddress + ">"
# 设置邮件主题
self.mm["Subject"] = Header(subject_content, 'utf-8')
# 邮件正文内容
body_content = bodyContent
# 构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式
message_text = MIMEText(body_content, "plain", "utf-8")
# 向MIMEMultipart对象中添加文本对象
self.mm.attach(message_text)
def SendMail(self):
mail_receivers = []
mail_receivers.append(self.ReceiverAddress)
# 发送邮件
# 创建SMTP对象
stp = smtplib.SMTP()
# 设置发件人邮箱的域名和端口,端口地址为25
stp.connect(self.mail_host, 25)
# set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
stp.set_debuglevel(1)
# 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码
stp.login(self.MailSender, self.mail_license)
# 发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str
stp.sendmail(self.MailSender, mail_receivers, self.mm.as_string())
print("邮件发送成功")
# 关闭SMTP对象
stp.quit()
def start(self,subject,content):
flag = self.Name2Mail(r'C:\Users\腻味\Desktop\ChattingSystem\ChattingSystemRobot\AutoMail\MailAddress.txt')
if flag == -1:
print('您的好友列表中查无此人')
return
else:
self.MailContent(subject,content)
self.SendMail()
if __name__ == '__main__':
AE = AutoEmail('李其炎2')
AE.start('垃圾邮件','写代码眼睛快瞎了')
~~~~~~~~ 由于原理性的部分自己也不是特别理解,因此并不会针对其中原理性的东西进行详细讲解,仅仅针对于代码中部分需要注意的地方进行阐述:
小
Tips:
- 借助于
python
自动化发送邮件,需要设置自己的邮箱开启邮箱授权码,具体开启的方式自行CSDN
检索(因为博主励志成为技术主,所以不太注重配置过程的讲解)。Name2Mail()
函数设置的目的更多是为后续智能机器人交互考虑,因为自动发送邮件时发送对象一定是以姓名name
的方式给出,而不是address
的方式,因此需设置映射文件实现姓名到邮箱地址的映射。
~~~~~~~~ OK,邮件发送应用比较简单,但是想弄懂为什么这么写代码,请移步知乎或者模块的官方文档,博主也还在努力学习中!!!
三、总结反思:
~~~~~~~~
技术上没啥想总结的,因为自己仅仅只是做下封装,实在是也总结不出什么,python
确实很简洁和强大,继续努力搬砖吧!!!