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装饰器使用示例及实际应用例子
Mar 06 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
Python操作csv文件实例详解
Jul 31 Python
python使用opencv读取图片的实例
Aug 17 Python
Python人脸识别初探
Dec 21 Python
python之pandas用法大全
Mar 13 Python
Django 使用logging打印日志的实例
Apr 28 Python
python opencv 图像拼接的实现方法
Jun 27 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
基于Python的Jenkins的二次开发操作
May 12 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 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读取xml方法介绍
2013/01/12 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
php创建类并调用的实例方法
2019/09/25 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
Convert Seconds To Hours
2007/06/16 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
python使用webdriver爬取微信公众号
2018/08/31 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
如何理解Python中的变量
2020/06/01 Python
师德演讲稿范文
2014/05/06 职场文书
团日活动总结怎么写
2014/06/25 职场文书
大专生求职信
2014/06/29 职场文书
代办社保委托书范文
2014/10/06 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
晚会开幕词
2015/01/28 职场文书
趣味运动会赞词
2015/07/22 职场文书
关于 Python json中load和loads区别
2021/11/07 Python