首页 > 编程 > Python > 正文

Python发送邮件的实例代码讲解

2019-11-25 11:34:36
字体:
来源:转载
供稿:网友

一、邮件发送示例

邮件发送示例

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邮箱需要使用SSLMAIL_USE_TLS = False # 不需要使用TLSMAIL_USERNAME = '@qq.com' # 填邮箱MAIL_PASSWORD = '' # 填授权码FLASK_MAIL_SENDER = '@qq.com' # 邮件发送方FLASK_MAIL_SUBJECT_PREFIX = '' # 邮件标题MAIL_DEFAULT_SENDER = '@qq.com' # 填邮箱,默认发送者

2.示例代码

import smtplibimport constant # 定义常量文件from email.header import Headerfrom email.mime.text import MIMETextconstant.SMTP_SERVER = 'smtp.qq.com'constant.PORT = 465class 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)

以上3点就是关于Python发送邮件的全部知识点,感谢大家的学习和对武林网的支持。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表