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编写脚本使IE实现代理上网的教程
Apr 23 Python
python字符串连接方法分析
Apr 12 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
对pandas进行数据预处理的实例讲解
Apr 20 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
Python生成器的使用方法和示例代码
Mar 04 Python
Django之无名分组和有名分组的实现
Apr 16 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
结束运行python的方法
Jun 16 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 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 select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
Python中使用中文的方法
2011/02/19 Python
python 从远程服务器下载东西的代码
2013/02/10 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
python实现简单的五子棋游戏
2020/09/01 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
通信工程专业毕业生推荐信
2013/12/25 职场文书
运动会广播稿200米
2014/01/27 职场文书
婚内分居协议书范文
2014/11/26 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
三潭印月的导游词
2015/02/12 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript