#encoding=utf-8
from email.mime.text import MIMEText
import smtplib
from email.header import Header
from email.utils import parseaddr, formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
class SendEmail(object):
#msg =MIMEText("cpu" %warning_text,'plain', 'utf-8') #发件内容 不加附件
msg = MIMEMultipart()#可插入附件模式
#base64.b64encode("str".encode('utf-8'))#plain为加密方式,还有auth login普通base64加密
from_addr = "123xujiangbo@163.com" #input("From:")
password = "xxxxx"#input("Password:")
#to_addr = "1193630409@qq.com"#input("To:")
to_addrs = ["xxxx0", "xxxx1", "xxxx2"]
#接收邮件列表
smtp_server = "smtp.163.com"#input("SMTP server:")
def addText(self):
self.msg.attach(MIMEText("warning text: %s" %self.warning_text,'plain', 'utf-8'))#插入文本
print("文本准备就绪...")
def multiPart(self):#插入附件
try:
#print("yyyy")
self.part = MIMEApplication(open('%s' %self.warning_annex, 'rb').read())
#print("xxxxx")
self.part.add_header('Content-Disposition', 'attachment', filename='%s' %self.warning_annex)
self.msg.attach(self.part)
print("附件添加ok")
except:
print("没有附件")
def _format_addr(self,s):
name, addr = parseaddr(s)
#print(name,addr)
#pname = Header(name, 'utf-8').encode()
#print(pname, addr)
#data = formataddr(pname, addr)
#print (data)
return formataddr((Header(name, 'utf-8').encode(), addr))
def sendEmail(self):
self.msg['From'] = self._format_addr('%s<%s>' %(self.warning_type,self.from_addr))
self.msgs = []
for i in self.to_addrs:
self.msg['To'] = (self._format_addr('<%s>' %i))
self.msgs.append(self.msg.as_string())
#因为self.msg.as_string()不能处理列表所以把处理过的列表加入列表一起发送
#print('!!!',self.msg['To'])
#self.msg['To'] = tuple(self.msg['To'])
#print("as_string:", self.msg.as_string())
#print('xxxxxxx')
self.msg['Subject'] = Header("%s" %self.warning_theme, 'utf-8').encode()
server = smtplib.SMTP(self.smtp_server, 25)
server.set_debuglevel(1)
server.login(self.from_addr, self.password)
#print("#######","toaddr: ", self.to_addrs, "as_string: ",self.msgs, "#####")
server.sendmail(self.from_addr, self.to_addrs, self.msg.as_string())
server.quit()
def __init__(self, warning_annex, warning_text , warning_type, warning_theme): #传入发送人和主题 可用作产品类型 和警报类型
self.warning_annex = warning_annex #附件
self.warning_theme = warning_theme
self.warning_type = warning_type
self.warning_text = warning_text
self.addText()
self.multiPart()
#self.sendEmail()
print("发送邮件测试")
def main():
warning_type = "test " #可以使用设备传入的值然后调用模块进行值得赋值
warning_theme = "warning theme"
warning_text = "test text"
warning_annex = ""
test = SendEmail() #可以把值传给初始化函数
if __name__ =="__main__":
main()