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 07 Python
Python3.2模拟实现webqq登录
Feb 15 Python
python 写的一个爬虫程序源码
Feb 28 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
pandas参数设置的实用小技巧
Aug 23 Python
详解Python中Pyyaml模块的使用
Oct 08 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 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生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
json 定义
2008/06/10 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
Python中qutip用法示例详解
2020/10/02 Python
Python os库常用操作代码汇总
2020/11/03 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
欢迎家长标语
2014/10/08 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
入党介绍人考察意见
2015/06/01 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python
SQL Server Agent 服务无法启动
2022/04/20 SQL Server