smtp观察者模式群发邮件
(一)需要在自己的邮箱开启POP3/SMTP服务
方式:
往下找:
点击会让你验证密保:(扫一下)
下面的授权码要记下来,待会代码登录要用:
(二)下面直接开始编码就好了:
import smtplib
from email.mime.text import MIMEText
class Monitor:
def __init__(self, sender):
self.observers = []
self.content = ''
self.sender = sender
def attach(self,observer):
self.observers.append(observer)
def sendMail(self):
recv_list = [s.email for s in self.observers]
message = MIMEText(self.content, "plain", "utf8") # 发送内容 朴素文本 编码
message["To"] = "\n".join(recv_list) # 接收者列表
message["From"] = self.sender # 发送者
message["Subject"] = "上课通知"
print(message) # 可以打印一下看看
self.smtp = smtplib.SMTP_SSL("smtp.qq.com", 465) # 登录smtp服务器
self.smtp.login(self.sender, "sksddvrvwbjvyygf") # 登录自己的账号
# 下面语句是发送者邮箱 接收者列表 发送内容,as_string方法目的是将发送内容进行封装
self.smtp.sendmail(self.sender,recv_list,message.as_string())
for s in self.observers:
s.status = "success"
# def __del__(self):
# self.smtp.close()
class Student:
def __init__(self, email):
self.email = email
self.status = ""
if __name__ == "__main__":
monitor = Monitor("[email protected]") #发送邮箱
stu1 = Student("[email protected]") #以下为接收邮箱
stu2 = Student("[email protected]")
stu3 = Student("[email protected]")
monitor.attach(stu1)
monitor.attach(stu2)
monitor.attach(stu3)
monitor.content = "上课了"
monitor.sendMail()
print(stu1.status)
print(stu2.status)
print(stu3.status)
由于本地防火墙可能有问题,我在手机上运行结果如下(软件叫 python3IDE),目的邮箱也收到了邮件: