python构建智能机器人系列博文---借助于python实现自动化发送邮件


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邮件操作模块:stmplibemail。代码完全借鉴于知乎的一位博主的代码(参考链接已经在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 = '[email protected]'):
        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确实很简洁和强大,继续努力搬砖吧!!!

猜你喜欢

转载自blog.csdn.net/DALEONE/article/details/125197203