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


    阅读目录

    一、邮件发送示例

    邮件发送示例

    flask_email及smtplib原生邮件发送示例,适用于基于Flask框架开发,但是内部设置的定时任务发送邮件/或提供离线接口发送邮件操作

    1.flask config配置

    # QQ邮箱配置
    MAIL_DEBUG = True  # 开启debug,便于调试看信息
    MAIL_SUPPRESS_SEND = False  # 发送邮件,为True则不发送
    MAIL_SERVER = 'smtp.qq.com'  # 邮箱服务器
    MAIL_PORT = 465  # 端口
    MAIL_USE_SSL = True  # 重要,qq邮箱需要使用SSL
    MAIL_USE_TLS = False  # 不需要使用TLS
    MAIL_USERNAME = '@qq.com'  # 填邮箱
    MAIL_PASSWORD = ''  # 填授权码
    FLASK_MAIL_SENDER = '@qq.com'  # 邮件发送方
    FLASK_MAIL_SUBJECT_PREFIX = ''  # 邮件标题
    MAIL_DEFAULT_SENDER = '@qq.com'  # 填邮箱,默认发送者
    

    2.示例代码

    import smtplib
    import constant  # 定义常量文件
    from email.header import Header
    from email.mime.text import MIMEText
    
    constant.SMTP_SERVER = 'smtp.qq.com'
    constant.PORT = 465
    
    
    class EmailSender(object):
        def __init__(self, subject, receivers, sender='ss@qq.com', password='123456', offline=False, html_body=None,
                     text_body=None, **kwargs):
            self.subject = subject
            self.receivers = receivers
            self.sender = sender
            self.password = password
            if offline:
                if html_body:
                    self.send_body = html_body
                    self._subtype = 'html'
                elif text_body:
                    self.send_body = text_body
                    self._subtype = 'plain'
                self.send_email_offline()
            else:
                from flask_mail import Mail
                self.mail = Mail()
                dic = dict(kwargs)
                self.send_email(html_body, text_body, attachments=dic.get("attachments"), sync=dic.get("sync"))
    
        def send_email_offline(self):
            try:
                message = MIMEText(self.send_body, self._subtype, 'utf-8')
                message['From'] = self.sender
                message['To'] = ','.join(self.receivers)
                message['Subject'] = Header(self.subject, 'utf-8')
                smtpObj = smtplib.SMTP_SSL(constant.SMTP_SERVER, constant.PORT)
                smtpObj.login(self.sender, self.password)
                smtpObj.sendmail(
                    self.sender, self.receivers, message.as_string())
                smtpObj.quit()
            except smtplib.SMTPException:
                return "smtp服务器发送异常 >> 无法发送邮件"
            except Exception as e:
                return f"邮件发送失败 >> {e}"
    
        def send_email(self, text_body, html_body, attachments=None, sync=False):
            from threading import Thread
            from flask import current_app
            from flask_mail import Message
            try:
                msg = Message(self.subject, recipients=self.receivers)
                msg.body = text_body
                msg.html = html_body
                if attachments:
                    for attachment in attachments:
                        msg.attach(*attachment)
                if not sync:
                    self.mail.send(msg)
                else:
                    Thread(target=self.send_async_email, args=(current_app._get_current_object(), msg)).start()
            except Exception as e:
                return f"邮件发送失败 >> {e}"
    
        def send_async_email(self, app, msg):
            with app.app_context():
                try:
                    self.mail.send(msg)
                except Exception as e:
                    print(f"邮件发送错误信息:{e}")
    

    3.使用

    err = EmailSender(subject='吃货询问', receivers=["123@qq.com", "1234@qq.cn"], text_body='吃了没呀?',  offline=True)
    if err:
        print(err)
  • 相关阅读:
    笔记:Jersey REST API 设计
    笔记:MyBatis 日志显示-log4j2
    笔记:MyBatis 其他特性
    笔记:MyBatis 动态SQL
    笔记:MyBatis 使用 Java API配置
    【JAVA】辨析:replace,replaceAll,replaceFirst
    【学习总结】计算机网络-纠错编码之海明码or汉明码
    【学习总结】计算机网络-检错编码之奇偶校验码and循环冗余码CRC
    【学习总结】快速上手Linux玩转典型应用-第7章-WebServer安装和配置讲解
    【问题解决方案】visudo: /etc/sudoers is busy, try again later
  • 原文地址:https://www.cnblogs.com/zhangliang91/p/11684551.html
Copyright © 2011-2022 走看看