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


Posted in Python onOctober 16, 2019

一、邮件发送示例

邮件发送示例

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)

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

Python 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
Python标准库defaultdict模块使用示例
Apr 28 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
Python实现识别图片内容的方法分析
Jul 11 Python
python修改txt文件中的某一项方法
Dec 29 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
python标准库os库的函数介绍
Feb 12 Python
python生成并处理uuid的实现方式
Mar 03 Python
python 的topk算法实例
Apr 02 Python
python运用sklearn实现KNN分类算法
Oct 16 #Python
python sklearn常用分类算法模型的调用
Oct 16 #Python
Python使用selenium + headless chrome获取网页内容的方法示例
Oct 16 #Python
使用python实现kNN分类算法
Oct 16 #Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
Oct 16 #Python
python可视化实现KNN算法
Oct 16 #Python
python实现KNN分类算法
Oct 16 #Python
You might like
PHP伪静态页面函数附使用方法
2008/06/20 PHP
php中的观察者模式
2010/03/24 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
asp批量修改记录的代码
2008/06/25 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
js单例模式详解实例
2013/11/21 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
Python机器学习之决策树算法
2017/12/22 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
Django框架封装外部函数示例
2019/05/28 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
10个顶级Python实用库推荐
2021/03/04 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
实习护理工作自我评价
2013/09/25 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
初中教师业务学习材料
2014/05/12 职场文书
技术经济专业求职信
2014/09/03 职场文书
2014年调度员工作总结
2014/11/19 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
2014年人事部工作总结
2014/12/03 职场文书
布达拉宫导游词
2015/02/02 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python