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 用户登录验证的小例子
Mar 06 Python
Python 创建子进程模块subprocess详解
Apr 08 Python
python difflib模块示例讲解
Sep 13 Python
几种实用的pythonic语法实例代码
Feb 24 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
python进阶之自定义可迭代的类
Aug 20 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
python实现银行管理系统
Oct 25 Python
python深copy和浅copy区别对比解析
Dec 26 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
Python 如何实现数据库表结构同步
Sep 29 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计算函数执行时间的方法
2015/03/20 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
JS图片预加载三种实现方法解析
2020/05/08 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
Python if语句知识点用法总结
2018/06/10 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
应届生财务管理求职信
2013/11/06 职场文书
策划助理岗位职责
2013/11/18 职场文书
高中运动会入场词
2014/02/14 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
2014年大学生工作总结
2014/11/20 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书