python 发送邮件的四种方法汇总


Posted in Python onDecember 02, 2020

这里针对smtplib做了一系列封装,可以完成以下四种场景:

  • 发送纯文本的邮件
  • 发送html页面的邮件
  • 发送带附件文件的邮件
  • 发送能展示图片的邮件

以上四种场景,已经做好了二次封装,经测试OK,使用时直接传入对应参数即可,直接上代码

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart


class SendEMail(object):
  """封装发送邮件类"""

  def __init__(self, host, port, msg_from, pwd):

    self.msg_from = msg_from
    self.password = pwd

    # 邮箱服务器地址和端口
    self.smtp_s = smtplib.SMTP_SSL(host=host, port=port)

    # 发送方邮箱账号和授权码
    self.smtp_s.login(user=msg_from, password=pwd)

  def send_text(self, to_user, content, subject, content_type='plain'):
    """
    发送文本邮件
    :param to_user: 对方邮箱
    :param content: 邮件正文
    :param subject: 邮件主题
    :param content_type: 内容格式:'plain' or 'html'
    :return:
    """
    msg = MIMEText(content, _subtype=content_type, _charset="utf8")

    msg["From"] = self.msg_from
    msg["To"] = to_user
    msg["subject"] = subject

    self.smtp_s.send_message(msg, from_addr=self.msg_from, to_addrs=to_user)

  def send_file(self, to_user, content, subject, reports_path, filename, content_type='plain'):
    """
    发送带文件的邮件
    :param to_user: 对方邮箱
    :param content: 邮件正文
    :param subject: 邮件主题
    :param reports_path: 文件路径
    :param filename: 邮件中显示的文件名称
    :param content_type: 内容格式
    """

    file_content = open(reports_path, "rb").read()

    msg = MIMEMultipart()

    text_msg = MIMEText(content, _subtype=content_type, _charset="utf8")
    msg.attach(text_msg)

    file_msg = MIMEApplication(file_content)
    file_msg.add_header('content-disposition', 'attachment', filename=filename)
    msg.attach(file_msg)

    msg["From"] = self.msg_from
    msg["To"] = to_user
    msg["subject"] = subject

    self.smtp_s.send_message(msg, from_addr=self.msg_from, to_addrs=to_user)

  def send_img(self, to_user, subject, content, filename, content_type='html'):
    '''
    发送带图片的邮件
    :param to_user: 对方邮箱
    :param subject: 邮件主题
    :param content: 邮件正文
    :param filename: 图片路径
    :param content_type: 内容格式
    '''
    subject = subject
    msg = MIMEMultipart('related')
    # Html正文必须包含<img src="cid:imageid" alt="imageid" width="100%" height="100%>
    content = MIMEText(content, _subtype=content_type, _charset="utf8")
    msg.attach(content)
    msg['Subject'] = subject
    msg['From'] = self.msg_from
    msg['To'] = to_user

    with open(filename, "rb") as file:
      img_data = file.read()

    img = MIMEImage(img_data)
    img.add_header('Content-ID', 'imageid')
    msg.attach(img)

    self.smtp_s.sendmail(self.msg_from, to_user, msg.as_string())

以上就是python 发送邮件的四种方法汇总的详细内容,更多关于python 发送邮件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python赋值语句后逗号的作用分析
Jun 08 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
python 读取excel文件生成sql文件实例详解
May 12 Python
python实现随机梯度下降(SGD)
Mar 24 Python
pandas数据分组和聚合操作方法
Apr 11 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
python遍历小写英文字母的方法
Jan 02 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
python 远程执行命令的详细代码
Feb 15 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 #Python
python 实现波浪滤镜特效
Dec 02 #Python
python 如何对logging日志封装
Dec 02 #Python
python3中确保枚举值代码分析
Dec 02 #Python
python使用yaml 管理selenium元素的示例
Dec 01 #Python
python3处理word文档实例分析
Dec 01 #Python
python3中布局背景颜色代码分析
Dec 01 #Python
You might like
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
webpack优化的深入理解
2018/12/10 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python程序中的观察者模式结构编写示例
2016/05/27 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
Python命令行解析模块详解
2018/02/01 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
在python中实现对list求和及求积
2018/11/14 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
志愿者活动总结范文
2014/04/26 职场文书
华山导游词
2015/02/03 职场文书
学术研讨会主持词
2015/07/04 职场文书
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android
Elasticsearch 配置详解
2022/04/19 Java/Android
MySQL数据库事务的四大特性
2022/04/20 MySQL
Python自动化实战之接口请求的实现
2022/05/30 Python