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

    import os
    import smtplib
    import logging
    from report_system.utils import excel_util
    from report_system.utils import style_util
    from email import encoders
    from email.header import Header
    from email.mime.base import MIMEBase
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    # 第三方 SMTP 服务
    mail_host = "smtp.mxhichina.com"  # 设置服务器
    mail_user = "mail@***.com"  # 用户名
    mail_pass = "mima"  # 口令
    sender = 'mail@***.com'
    
    
    def send_files_mail(files, text, title, html=None, receiver='name@***.com', content_type='plain', tab=5):
        try:
            """
            发送附件信息
            :param files: 要发送的发送文件的集合信息
            :param title: 要发送的标题
            :param text: 发送的文件的内容
            :param receiver: 想要发送的目标人物  eg: 'aaa@***.com;bbb@***.com'
            :param content_type: content_type  默认 plain
            :return:
            """
            # 创建一个带附件的实例
            message = MIMEMultipart()
            message['From'] = sender
            message['To'] = receiver
            message['Subject'] = Header(title, 'utf-8')
            # 邮件正文内容
            message.attach(MIMEText(text, content_type, 'utf-8'))
    
            if html:
                message.attach(MIMEText(html, 'html', 'utf-8'))
    
            contype = 'application/octet-stream'
            maintype, subtype = contype.split('/', 1)
    
            for file in files if isinstance(files, list) else str(files).split(';'):
                # 构造附件
                data = open(file.strip(), 'rb')
                file_msg = MIMEBase(maintype, subtype)
                file_msg.set_payload(data.read())
                data.close()
                encoders.encode_base64(file_msg)
                basename = os.path.basename(file)
                file_msg.add_header('Content-Disposition', 'attachment', filename=basename)
                message.attach(file_msg)
    
            smtp_obj = smtplib.SMTP_SSL(host=mail_host)  # 注意:如果遇到发送失败的情况(提示远程主机拒接连接),这里要使用SMTP_SSL方法
            smtp_obj.connect(mail_host)
            smtp_obj.login(mail_user, mail_pass)
            smtp_obj.sendmail(sender, str(receiver).strip().split(";"), message.as_string())
            logging.info("邮件发送成功!!!to = {}".format(receiver))
            logging.info("发送成功的文件是 files = {}".format(files))
            smtp_obj.quit()
        except Exception as e:
            if tab > 0:
                logging.error('发送失败!  正在尝试重新发送!请稍等。。。。。。')
                send_files_mail(files, text, title, receiver=receiver, content_type=content_type, tab=tab - 1)
            else:
                logging.exception(e)
  • 相关阅读:
    从C,C++,JAVA和C#看String库的发展(一)----C语言和C++篇
    Intent----android中的伟大邮差
    一步一步掌握线程机制(五)---等待与通知机制
    一步一步掌握线程机制(四)---同步方法和同步块
    一步一步掌握线程机制(三)---synchronized和volatile的使用
    利用单例模式解决全局访问问题
    一步一步掌握java的线程机制(二)----Thread的生命周期
    一步一步掌握java的线程机制(一)----创建线程
    如何快速学会android的四大基础----Service篇
    前端工程师必备实用网站
  • 原文地址:https://www.cnblogs.com/bianzhiwei/p/10826121.html
Copyright © 2011-2022 走看看