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 获取进程pid号的方法
Mar 10 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
Django基础知识与基本应用入门教程
Jul 20 Python
python中时间模块的基本使用教程
May 14 Python
python实现统计代码行数的小工具
Sep 19 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
Python sep参数使用方法详解
Feb 12 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
谈谈python垃圾回收机制
Sep 27 Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 Python
Python读取和写入Excel数据
Apr 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中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
php实现的mongodb操作类
2015/05/28 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
Python函数生成器原理及使用详解
2020/03/12 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
Python操作Excel的学习笔记
2021/02/18 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
如何在Shell脚本中使用函数
2015/09/06 面试题
高三政治教学反思
2014/02/06 职场文书
先进集体获奖感言
2014/02/13 职场文书
企业管理毕业生求职信
2014/03/11 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
学习保证书
2015/01/17 职场文书