import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os class SendEMail(object):
"""封装发送邮件类""" def __init__(self, host: str, port: int, user: str, pwd: str):
self.host = host
self.port = port
self.user = user
self.pwd = pwd def __send(self, msg):
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(self.host, self.port)
smtpObj.login(self.user, self.pwd)
smtpObj.sendmail(self.user, msg["To"], msg.as_string())
print("邮件发送成功")
except Exception as e:
print("邮件发送失败") def send_text(self, to_user: str, content: str, subject: str):
"""
发送文本邮件
:param to_user: 对方邮箱
:param content: 邮件正文,文本格式
:param subject: 邮件主题
:return:
""" # 使用email构造邮件
msg = MIMEText(content, _subtype='plain', _charset="utf8")
msg["From"] = self.user
msg["To"] = to_user
msg["subject"] = subject self.__send(msg) def send_html(self, to_user: str, content: str, subject: str):
"""
发送html格式邮件
:param to_user: 对方邮箱
:param content: 邮件正文,html格式
:param subject: 邮件主题
:return:
"""
# 使用email构造邮件
msg = MIMEText(content, _subtype='html', _charset="utf8")
msg["From"] = self.user
msg["To"] = to_user
msg["subject"] = subject self.__send(msg) def send_attachment(self, to_user: str, content: str, subject: str, files: list):
"""
发送附件邮件
:param to_user: 对方邮箱
:param content: 邮件正文,文本格式
:param subject: 邮件主题
:return:
"""
# 创建一个带附件的实例
msg = MIMEMultipart()
msg['From'] = self.user
msg['To'] = to_user
msg['subject'] = subject
# 邮件正文内容
msg.attach(MIMEText(content, 'plain', 'utf-8'))
# 构造附件
for file in files:
att = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
_, file_name = os.path.split(file)
att["Content-Disposition"] = 'attachment; filename="{}"'.format(file_name)
msg.attach(att)
self.__send(msg)

  

python封装发送邮件类的更多相关文章

  1. Python 面向对象基础(类、实例、方法、属性封装)

    python是面向对象语言,一切皆对象. 面向过程: 变量和函数. “散落” 在文件的各个位置,甚至是不同文件中.看不出变量与函数的相关性,非常不利于维护,设计模式不清晰. 经常导致程序员,忘记某个变 ...

  2. python 日志的配置,python对日志封装成类,日志的调用

    # python 日志的配置,python对日志封装成类,日志的调用 import logging # 使用logging模块: class CLog: # --------------------- ...

  3. Python+Selenium框架设计之框架内封装基类和实现POM

    原文地址https://blog.csdn.net/u011541946/article/details/70269965 作者:Anthony_tester 来源:CSDN    博客地址https ...

  4. python学习13类2之封装

    '''''''''面向对象三大特性:封装,继承,多态1.封装: 类中以_或者__的属性,都是私有属性,禁止外部调用.'''class Student(object): def __init__(sel ...

  5. Python Excel工具类封装, 给excel表头搞点颜色

    封装Excel工具类 我们常用的excel工具类,读有xlrd,写有xlwt.有读有写,新一代库有pandas,openpyxl等等. 大家用法都差不多,今天博主就介绍新手最爱,我也爱的xlrd和xl ...

  6. Python进阶_类与实例

    上一节将到面对对象必须先抽象模型,之后直接利用模型.这一节我们来具体理解一下这句话的意思. 面对对象最重要的概念就是类(class)和实例(instance),必须牢记类是抽象的模板,比如studen ...

  7. Python学习:类和实例

    Python学习:类和实例 本文作者: 玄魂工作室--热热的蚂蚁 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规 ...

  8. Python 内编写类的各种技巧和方法

    Python 内编写类的各种技巧和方法 简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象 ...

  9. python大法好——Python SMTP发送邮件

    Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...

随机推荐

  1. 【weex开发】weex官方源码

    公司目前使用版本:weex_sdk:0.10.0 介绍地址:https://bintray.com/alibabaweex/maven/weex_sdk/0.18.0 weex最新版本:weex_sd ...

  2. 安卓xml布局中 android:paddingBottom="@dimen/activity_vertical_margin"是什么意思?

    @dimen/activity_vertical_margin 是什么意思? @dimen/activity_vertical_margin这个的意思就是在你的values文件夹下面的dimens文件 ...

  3. 使用babel编译器将es6代码转为es5的方法

    1.首先需要安装工具 babel-cli =========  npm i babel-cli -g   install 可以使用i 代替 2.安装插件   npm i --save-dev babe ...

  4. 《头号玩家》AI电影调研报告(五)

    4.VR自由行走跑步机 电影中,它可以让玩家朝任意方向无限奔跑并保持在平台最中央,还可以模拟上台阶和走斜坡的情况.而下面这件VR跑步装备,可以让你在游戏世界穿行自如. 奥地利创意公司Cyberith公 ...

  5. 面试官:Zookeeper集群怎么搭建?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 作为一名Java拧螺丝选手,不必 ...

  6. js知识梳理6:关于函数的要点梳理(2)(作用域链和闭包)

    写在前面 注:这个系列是本人对js知识的一些梳理,其中不少内容来自书籍:Javascript高级程序设计第三版和JavaScript权威指南第六版,感谢它们的作者和译者.有发现什么问题的,欢迎留言指出 ...

  7. 前端javascript之BOM、DOM操作、事件

    BOM与DOM操作 BOM 浏览器对象模型>>>:使用js操作浏览器 DOM 文档对象模型>>>:使用js操作前端页面 window对象 所有浏览器都支持 wind ...

  8. InnoDB两次写

    partial page write问题: 默认情况下,innodb的一个页面时16k大小,其数据校验也是针对这16k来校验的,将数据写入磁盘是以页面为单位的.文件系统是以4k为单位写入的,机械磁盘是 ...

  9. Codeforces Round #767 (Div. 2)——B. GCD Arrays

    B. GCD Arrays 题源:https://codeforces.com/contest/1629/problem/B 题目大意 给出一段区间[l, r],可以进行操作(把任意两个数拿出来,把他 ...

  10. python基础练习题(题目 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数)

    day12 --------------------------------------------------------------- 实例019:完数 题目 一个数如果恰好等于它的因子之和,这个 ...