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使用webbrowser浏览指定url的方法
Apr 04 Python
python中requests模块的使用方法
Apr 08 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
Django开发中复选框用法示例
Mar 20 Python
tensorflow学习笔记之简单的神经网络训练和测试
Apr 15 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 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通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
input file获得文件根目录简单实现
2013/04/26 PHP
PHP eval函数使用介绍
2013/12/08 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
JavaScript使用cookie
2007/02/02 Javascript
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
简单了解微信小程序的目录结构
2019/07/01 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
机器学习python实战之手写数字识别
2017/11/01 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
用python制作个视频下载器
2021/02/01 Python
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
小学教师暑期培训方案
2014/08/28 职场文书
教师师德考核自我评价
2014/09/13 职场文书
小学家长意见怎么写
2015/06/03 职场文书
教师个人教学反思
2016/02/23 职场文书
详解Vue的options
2021/05/15 Vue.js
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
java实现web实时消息推送的七种方案
2022/07/23 Java/Android