dajngo-利用配置反射调用模块-发送邮件
第一:优先写好email文件代码,
import smtplib from email.mime.text import MIMEText from email.utils import formataddr from utlis.massage.base import Baseemail class Email(Baseemail): def __init__(self): self.fromname='帅哥' self.fromemail='******.com' #自己的邮箱 self.pwd='*******' #邮箱密码 def send(self,subject,body,toemail,name): msg = MIMEText(body, 'plain', 'utf-8') # 发送内容 msg['From'] = formataddr([self.fromname, self.fromemail]) # 发件人 msg['To'] = formataddr([name, toemail]) # 收件人 msg['Subject'] = subject # 主题 server = smtplib.SMTP("smtp.qq.com", 25) # SMTP服务 server.login(self.fromemail, self.pwd) # 邮箱用户名和密码 server.sendmail(self.fromemail, [toemail, ], msg.as_string()) # 发送者和接收者 server.quit()
第二部:写好配置信息,以后要改只要改配置信息就行.
MASSAGE=[ 'utlis.massage.email.Email', #utlis.massage.email是上面email的路径信息, Email是emial的类.
]
第三部:
import importlib from django.conf import settings def send_massage(subject,name,toemail,body): for msg in settings.MASSAGE: #从settings中取到配置信息 model_path,class_name=msg.rsplit('.',maxsplit=1) #'utlis.massage.email.Email'取出来从右边的第一个. 切分,取到路径和调用的类字符串
m=importlib.import_module(model_path) #利用上面的字符串找到路径
obj=getattr(m,class_name)() #反射, 路径信息找到py文件,其实就是以个大模块,所以可以用反射找到里面的一个类,并且把该类实例化
obj.send(subject,body,toemail,name) #调用这个类的send()方法.