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使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
Nov 02 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
Django unittest 设置跳过某些case的方法
Dec 26 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
Python接口自动化测试的实现
Aug 28 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
Python基础之pandas数据合并
Apr 27 Python
python编程项目中线上问题排查与解决
Nov 01 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生成验证码
2017/02/23 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
python实现中文分词FMM算法实例
2015/07/10 Python
python学习之编写查询ip程序
2016/02/27 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
django_orm查询性能优化方法
2018/08/20 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
详解Python 正则表达式模块
2018/11/05 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
个人授权委托书范文
2014/09/21 职场文书
大学生村官入党自传
2015/06/26 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
MySQL数据库查询之多表查询总结
2022/08/05 MySQL