python发送邮件

来源:互联网 发布:网络教育统考平台 编辑:程序博客网 时间:2024/06/16 05:58

说明:python虽然有smtplib包,但发送邮件时自己要写的代码还是有点多,无法做到拿到即用,所以封装一下。

MailTool:邮件工具类,实例化后可直接调用其方法
send():发送邮件,可处理附件,发送给多人等

#!/usr/bin/env python# coding=utf-8"""Author: DENGQINGYONGTime:   17/2/10 11:05 Desc:   发送邮件示例代码""" import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom os.path import existsclass MailTool(object):    """        用途:            邮件发送工具        参数:            send_username:  发送者邮箱            send_smtp:      发送者邮箱对应的smtp服务器地址            send_password:  发送都邮箱密码    """    def __init__(self, send_username, send_smtp=None, send_password=None,):        """初始化实例,需要提供发送方信息:发送smtp服务器,用户名,密码等"""        self.send_smtp = send_smtp        self.send_username = send_username        self.send_password = send_password    def send(self, receiver, subject, content, mail_format="plain", mail_charset="utf-8", attachs=None):        """            发送邮件            参数:                 receiver:接收人邮箱列表,                 subject:邮件主题,                 content:邮件主题,                 mail_format:邮件格式,取值有plain和html,                 mail_charset:邮件字符集,                 attachs:附件路径列表            """        # 转换正文类型为规范类型        if mail_format == "text":            mail_format = "plain"        # 处理邮件正文格式        if mail_format == "plain":            print content            pass        elif mail_format == "html":            content = "<html><body>%s</body></html>" % content            print content        else:            print "邮件格式输入错误: %s, 应该为text或html" % mail_format            return 1        msg = MIMEText(content, mail_format, mail_charset)        msg["Subject"] = Header(subject, mail_charset)        msg["From"] = Header(self.send_username, mail_charset)        if isinstance(receiver, (list, tuple)):            msg["To"] = Header(', '.join(receiver), 'utf-8')        else:            msg["To"] = Header(receiver, mail_charset)        # 处理附件        if attachs:            msg = self.attachment(msg, attachs)        smtp = smtplib.SMTP()        smtp.connect(self.send_smtp)        smtp.login(self.send_username, self.send_password)        smtp.sendmail(self.send_username, receiver, msg.as_string())        smtp.quit()    def attachment(self, msg, attachs):        """处理附件,将附件添加到邮件中"""        msg_part = MIMEMultipart()        msg_part["From"] = msg["From"]        msg_part["To"] = msg["To"]        msg_part["Subject"] = msg["Subject"]        # print msg.get_payload(decode=True)        msg_part.attach(msg)        if isinstance(attachs, (list, tuple)):            for attach in attachs:                msg_part = self.add_attach(msg_part, attach)        else:            msg_part = self.add_attach(msg_part, attachs)        return msg_part    def add_attach(self, attobj, filename):        """将单个文件添加到附件对象中"""        if exists(filename):            attachname = filename.split('/')[-1]            if len(filename) == 0:                attachname = filename.split('\\')[-1]        else:            raise IOError("文件不存: %s" % filename)        attach = MIMEText(open(filename, "rb").read(), "base64", "utf-8")        attach["Content-Type"] = "application/octet-stream"        attach["Content-Disposition"] = "attachment; filename='%s'" % attachname        attobj.attach(attach)        return attobjif __name__=="__main__":    attachs = [u'/Users/dengqingyong/Work/SN.txt', u'/Users/dengqingyong/Downloads/商户入驻申请更改.png']    receiver = ['it_xxx@qq.com', 'it_xxx@aliyun.com']    mail = MailTool("yu12377@163.com", "smtp.163.com", "password")    mail.send(receiver, u'优美诗词收藏', u'多情自古空余恨,好梦右来最易醒。——清·史清《溪佚题》', 'plain', attachs=attachs)
原创粉丝点击