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 SQLite3数据库操作类分享
Jun 10 Python
跟老齐学Python之使用Python操作数据库(1)
Nov 25 Python
Python内置函数之filter map reduce介绍
Nov 30 Python
python访问系统环境变量的方法
Apr 29 Python
深入探究Python中变量的拷贝和作用域问题
May 05 Python
python flask 多对多表查询功能
Jun 25 Python
python 生成器协程运算实例
Sep 04 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
详解Python with/as使用说明
Dec 13 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
python从ftp获取文件并下载到本地
Dec 05 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
晶体管来复再生式二管收音机
2021/03/02 无线电
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
PHP图片加水印实现方法
2016/05/06 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
Python 一句话生成字母表的方法
2019/01/02 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
结构工程个人自荐信范文
2013/11/30 职场文书
节约用电标语
2014/06/17 职场文书
起诉书范文
2015/05/20 职场文书
让生命充满爱观后感
2015/06/08 职场文书
尊师重教主题班会
2015/08/14 职场文书
护士业务学习心得体会
2016/01/25 职场文书
《我是什么》教学反思
2016/02/16 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
人民币符号
2022/02/17 杂记