python 发邮件

#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()

 

posted on 2017-01-08 17:51  游荡的鱼  阅读(99)  评论(0)    收藏  举报

导航