import os,smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email.header import Header from email import encoders class SMTPMailer(): __send__ = 0 __essl__ = False __host__ = { "host": '', "port": 25 } __user__ = { "user": '', "pass": '' } __mail__ = { "fr": {"name": '', "addr": ''}, "to": [], "cc": [], "bc": [], "attachs": [], "subject": '', "content": '' } def enableSSL(self, ch=True): self.__essl__ = ch def host(self, host, port): self.__host__["host"] = host self.__host__["port"] = port def user(self, user, password): self.__user__["user"] = user self.__user__["pass"] = password def sendFrom(self, name='', addr=''): self.__mail__["fr"]["name"] = name self.__mail__["fr"]["addr"] = addr def sendTo(self,recvlist): if isinstance(recvlist, str): recvlist = [recvlist] self.__mail__["to"] = recvlist def sendCc(self,recvlist): if isinstance(recvlist, str): recvlist = [recvlist] self.__mail__["cc"] = recvlist def sendBc(self,recvlist): if isinstance(recvlist, str): recvlist = [recvlist] self.__mail__["bc"] = recvlist def subject(self,text): self.__mail__["subject"] = text def content(self, text): self.__mail__["content"] = text def attachs(self,filelist): if isinstance(filelist, str): filelist = [filelist] for value in filelist: if not os.path.exists(value): raise Exception('文件未找到 | File not found.') self.__mail__["attachs"] = filelist def send(self): if self.__send__: return {"code": 1, "message": 'Mail has been sent.'} message = MIMEMultipart() messageFrom = Header() messageFrom.append(self.__mail__["fr"]["name"]) messageFrom.append('<' + self.__mail__["fr"]["addr"] + '>') message["From"] = messageFrom message["To"] = ';'.join(self.__mail__["to"]) message["Cc"] = ';'.join(self.__mail__["cc"]) message["Bcc"] = ';'.join(self.__mail__["bc"]) message['Subject'] = Header(self.__mail__["subject"]) message.attach(MIMEText(self.__mail__["content"], 'html', 'utf-8')) for value in self.__mail__["attachs"]: mime = MIMEBase('application', 'octet-stream') mime.add_header('Content-Disposition', 'attachment', filename=os.path.basename(value)) mime.set_payload(open(value, 'rb').read()) encoders.encode_base64(mime) message.attach(mime) try: if self.__essl__: smtp = smtplib.SMTP_SSL(self.__host__["host"], self.__host__["port"]) else: smtp = smtplib.SMTP(self.__host__["host"], self.__host__["port"]) except: return {"code": 1, "message": 'Connection failure.'} try: smtp.login(self.__user__["user"], self.__user__["pass"]) except: return {"code": 1, "message": 'Authentication failed.'} try: smtp.sendmail(self.__user__["user"], self.__mail__["to"] + self.__mail__["cc"] + self.__mail__["bc"], message.as_string()) smtp.quit() self.__send__ = 1 return {"code": 0, "message": ''} except Exception as error: return {"code": 1, "message": error} if __name__ == '__main__': # Example. mailer = SMTPMailer() mailer.enableSSL(True) mailer.host('smtp.qq.com', 465) mailer.user('', '') mailer.sendFrom('', '') mailer.sendTo(['']) mailer.sendCc(['']) mailer.sendBc(['']) mailer.subject('这是一封测试邮件') mailer.content('
邮件发送HTML格式文件测试
') mailer.attachs(['./example.xlsx']) print(mailer.send())