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)

  

最新文章

  1. Oracle 乱码
  2. Linux Apache和Nginx网络模型详解
  3. 2013 Multi-University Training Contest 6
  4. 546A. Soldier and Bananas
  5. delphi 菜单的项目是否可用
  6. Python中的函数对象与闭包
  7. [wikioi]关押罪犯
  8. 动态字符串 Stringbuilder类
  9. silverlight中datagrid数据到处excel
  10. ABP组件包升级
  11. 前端数据存储方案集合(cookie localStorage等)以及详解 (一)
  12. Java注释用处
  13. JS实现打开本地文件或文件夹 ActiveXObject
  14. [R] Lexical & Dynamic Scoping / Execution & Calling environments / Closures
  15. 你想要的Python面试都在这里了【315+道题】
  16. rabbitmq使用方法(一)
  17. isinstance, type, issubclass
  18. Python:快速查找出被挂马的文件
  19. ASP.NET MVC 此安装不支持该项目类型解决方法
  20. LinkedIn实时低延迟数据抓取系统Databus开源

热门文章

  1. 使用 IDEA 创建 SpringBoot 项目(详细介绍)+ 源码案例实现
  2. 解决vue安装时出现vue --version或vue不是内部命令的问题
  3. caioj 1002: [视频]实数运算2[水题]
  4. c++对于c的拓展_引用的本质是指针常量
  5. 小米手环解锁MacOS系统笔记本MacBookPro
  6. LevelDB 学习笔记2:合并
  7. 技术管理进阶——一线Leader怎么做?经理的速成宝典
  8. IoT平台如何实现业务配置中心
  9. [linux tips] puppet client ssl 证书过期
  10. 创建第一个c程序