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中的变量和赋值运算符
Oct 12 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
Python提取网页中超链接的方法
Sep 18 Python
python中redis的安装和使用
Dec 04 Python
Python和Java进行DES加密和解密的实例
Jan 09 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
python匹配两个短语之间的字符实例
Dec 25 Python
python英语单词测试小程序代码实例
Sep 09 Python
python异常处理和日志处理方式
Dec 24 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
pytorch 中autograd.grad()函数的用法说明
May 12 Python
Python基础教程,Python入门教程(超详细)
Jun 24 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/11/11 PHP
php中in_array函数用法分析
2014/11/15 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
Python导入txt数据到mysql的方法
2015/04/08 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
小班下学期评语
2014/05/04 职场文书
2014年政协工作总结
2014/12/09 职场文书
文明单位申报材料
2014/12/23 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
js实现上传图片到服务器
2021/04/11 Javascript
Win11软件图标固定到任务栏
2022/04/19 数码科技
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL