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继承和抽象类的实现方法
Jan 14 Python
简单介绍Python中的JSON模块
Apr 08 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
Jul 02 Python
python用10行代码实现对黄色图片的检测功能
Aug 10 Python
python实现下载文件的三种方法
Feb 09 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
Python之关于类变量的两种赋值区别详解
Mar 12 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 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的curl实现get和post的代码
2008/08/23 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
php下Memcached入门实例解析
2015/01/05 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python的argparse库使用详解
2018/10/09 Python
python实现超市商品销售管理系统
2019/11/22 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
文秘专业应届生求职信范文
2013/11/14 职场文书
中专生职业生涯规划书范文
2014/01/10 职场文书
教师师德反思材料
2014/02/15 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
详解Python如何批量采集京东商品数据流程
2022/01/22 Python