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 相关文章推荐
python实现识别相似图片小结
Feb 22 Python
python中实现k-means聚类算法详解
Nov 11 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 Python
python爬虫模块URL管理器模块用法解析
Feb 03 Python
python的launcher用法知识点总结
Aug 07 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 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
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
现代化办公人员工作的自我评价
2013/10/16 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
2014年优秀党员材料
2014/12/18 职场文书
《窃读记》教学反思
2016/02/18 职场文书
比较几种Redis集群方案
2021/06/21 Redis
python3中apply函数和lambda函数的使用详解
2022/02/28 Python
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
Python实现聚类K-means算法详解
2022/07/15 Python