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处理文本文件实现生成指定格式文件的方法
Jul 31 Python
bpython 功能强大的Python shell
Feb 16 Python
利用Python抓取行政区划码的方法
Nov 28 Python
python如何重载模块实例解析
Jan 25 Python
Sanic框架请求与响应实例分析
Jul 16 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
用python爬取租房网站信息的代码
Dec 14 Python
python实现智能语音天气预报
Dec 02 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
python 解决函数返回return的问题
Dec 05 Python
python爬虫scrapy框架的梨视频案例解析
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文件读写操作之文件读取方法详解
2011/01/13 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
python发送邮件功能实现代码
2016/07/15 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
python实现共轭梯度法
2019/07/03 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
C,C++的几个面试题小集
2013/07/13 面试题
C++程序员求职信
2014/05/07 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
护士自我推荐信范文
2015/03/24 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
观后感开头
2015/06/19 职场文书