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中操作字符串之rstrip()方法的使用
May 19 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
May 08 Python
python中模块的__all__属性详解
Oct 26 Python
python中lambda()的用法
Nov 16 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
Jupyter notebook如何修改平台字体
May 13 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
Python绘图之柱形图绘制详解
Jul 28 Python
python中绕过反爬虫的方法总结
Nov 25 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判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
在模板页面的js使用办法
2010/04/01 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
python实现的解析crontab配置文件代码
2014/06/30 Python
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
在Python程序中实现分布式进程的教程
2015/04/28 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
Python pandas常用函数详解
2018/02/07 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python设置值及NaN值处理方法
2018/07/03 Python
python英语单词测试小程序代码实例
2019/09/09 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
python 贪心算法的实现
2020/09/18 Python
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
情况说明书格式范文
2014/05/06 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
angular异步验证器防抖实例详解
2022/03/31 Javascript
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript