zoukankan      html  css  js  c++  java
  • python + SMTP 发送邮件

    # SMTP发送邮件
    import smtplib
    from email.mime.image import MIMEImage
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from Config import ConstantConfig as con
    
    
    # class SendEmail():
    #
    #     def __init__(self):
    #         # 第三方 SMTP 服务
    #         self.mail_host = con.MAIL_HOST  # 设置服务器
    #         self.mail_user = con.MAIL_USER  # 用户名
    #         self.mail_pass = con.MAIL_PW  # 发送方邮箱的授权码
    #         self.sender = con.SENDER    # 邮件发送方
    #         self.receivers = con.RECEIVERS  # 邮件接收方,可设置为你的QQ邮箱或者其他邮箱
    #
    #     """发送附件"""
    #     def send_enclosure(self,file_name):
    #
    #         # 创建一个带附件的实例
    #         message = MIMEMultipart()
    #         message['From'] = Header(self.sender, 'utf-8')
    #         message['To'] = Header(str(self.receivers), 'utf-8')
    #         subject = con.SUBJECT  # 邮件主题
    #         message['Subject'] = Header(subject, 'utf-8')
    #
    #         #邮件正文内容
    #         message.attach(MIMEText(con.TEXT, 'plain','utf-8'))    # 'plain'表示纯文本
    #
    #         # 构造附件1,传送当前目录下的 test.txt 文件
    #         att1 = MIMEText(open(file_name,encoding='utf-8').read())
    #         att1["Content-Type"] = 'application/octet-stream'
    #         # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    #         att1["Content-Disposition"] = 'attachment; filename=%s'%file_name
    #         message.attach(att1)
    #
    #         try:
    #             smtpObj = smtplib.SMTP()
    #             smtpObj.connect(self.mail_host, 25)  # 25 为 SMTP 默认端口号
    #             smtpObj.login(self.mail_user, self.mail_pass)   # 登录邮箱
    #             smtpObj.sendmail(self.sender, self.receivers, message.as_string())  # 发送邮件,as_string()把MIMEText对象变成str
    #             print("邮件发送成功")
    #         except smtplib.SMTPException as e:
    #             print("Error: {}".format(e))
    
    # SendEmail().send_enclosure(r"D:P5-Metabase BIReports
    esult_2020-08-17-17_45_31.html")
    
    def sendEmail(file_name):
        global s
        msg = MIMEMultipart('mixed')
        msg['Subject'] = con.SUBJECT
        msg['From'] = con.SENDER
        msg['To'] = ';'.join(con.RECEIVERS) #有多个收件人时,通过join将列表转换为以;为间隔的字符串
    
        # 构造文字内容
        text_plain = MIMEText(con.TEXT, 'plain', 'utf-8' )
        msg.attach(text_plain )
    
        # 构造图片链接
        with open(con.IMAGR_PATH, 'rb' ) as f:
            sendimagefile = f.read()
            image = MIMEImage(sendimagefile )
            image.add_header('Content-ID', '<image1>' )
            image["Content-Disposition"] = 'attachment; filename="testimage.png"'
            msg.attach(image )
    
        # 构造html
        # 发送正文中的图片:由于包含未被许可的信息,网易邮箱定义为垃圾邮件,报554 DT:SPM :<p><img src="cid:image1"></p>
        with open(file_name,'rb') as f:
            html = f.read()
            text_html = MIMEText(html, 'html', 'utf-8' )
            text_html["Content-Disposition"] = 'attachment; filename=%s'%file_name
            msg.attach(text_html )
    
        # 构造附件
        with open(file_name, 'rb') as f:
            sendfile = f.read()    # rc.get_email("report_path") 为测试报告的地址
            text_att = MIMEText(sendfile, 'base64', 'utf-8' )
            text_att["Content-Type"] = 'application/octet-stream'
            # 以下附件可以重命名成aaa.txt
            # text_att["Content-Disposition"] = 'attachment; filename="aaa.txt"'
            # 另一种实现方式
            text_att.add_header('Content-Disposition', 'attachment', filename='aaa.txt' )
            # 以下中文测试不ok
            # text_att["Content-Disposition"] = u'attachment; filename="中文附件.txt"'.decode('utf-8')
            msg.attach(text_att )
    
        #发送邮件
        try:
            s = smtplib.SMTP_SSL(con.MAIL_HOST, con.MAIL_PORT)# 邮件服务器及端口号
            s.login(con.MAIL_USER, con.MAIL_PW )
            s.sendmail(con.SENDER, con.RECEIVERS, msg.as_string() )
            print("邮件发送成功")
        except smtplib.SMTPException as e:
            print("Error: {}".format(e))
        finally:
            s.quit()
    

      

  • 相关阅读:
    MIFARE Classic S50技术详解
    windown 使用python 自动切换网络
    CPU封装技术介绍
    openssl unicode编译以及VC++2015环境下的问题
    重新开启此博
    Mifare简介
    python全栈(中国历史天气可视化系统)
    cnblog优化指南
    Mysql日志详解
    scrapy抓取所有网站域名
  • 原文地址:https://www.cnblogs.com/jasmine0627/p/13530183.html
Copyright © 2011-2022 走看看