对Python发送邮件进行封装

Python发送邮件分为四步

  1. 连接到smtp服务器
  2. 登陆smtp服务器
  3. 准备邮件
  4. 发送邮件

导入所需要的包

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.mime.application import MIMEApplication
  4. from email.mime.multipart import MIMEMultipart

一、连接到smtp服务器

方式一:不使用ssl加密

  1. smtp = smtplib.SMTP(host="smtp.163.com", port=25)

方式二:使用ssl加密

  1. smtp = smtplib.SMTP_SSL(host="smtp.163.com", port=465)

*注意:传host参数时,如果是QQ邮箱就改成'smtp.qq.com'

二、登陆smtp服务器

  1. smtp.login(user="发件人地址", password="授权码")

三、准备邮件

①:发送文本邮件

1、准备内容

  1. f_user = "发件人地址"
  2. t_user = "收件人地址"
  3. content = "邮件的正文"
  4. subject = "邮件的主题"

2、使用email构造邮件

  1. msg = MIMEText(content, _subtype='plain', _charset="utf8")
  2. # 添加发件人
  3. msg["From"] = f_user
  4. # 添加收件人
  5. msg["To"] = t_user
  6. # 添加邮件主题
  7. msg["subject"] = subject
②:发送带附件的邮件

1、准备内容

  1. f_user = "发件人地址"
  2. t_user = "收件人地址"
  3. content = "邮件的正文"
  4. subject = "邮件的主题"
  5. # 读取要发送附件的内容
  6. file_content = open("附件文件名", "rb").read()

2、使用email构造邮件

(1)构造一封多组件的邮件

  1. msg = MIMEMultipart()

(2)往多组件邮件中加入文本内容

  1. text_msg = MIMEText(content, _subtype='plain', _charset="utf8")
  2. msg.attach(text_msg)

(3)往多组件邮件中加入文件附件

  1. file_msg = MIMEApplication(file_content)
  2. file_msg.add_header('content-disposition', 'attachment', filename='发送附件的名称(可自定义)')
  3. msg.attach(file_msg)

3、添加发件人、收件人、邮件主题

  1. # 添加发件人
  2. msg["From"] = f_user
  3. # 添加收件人
  4. msg["To"] = t_user
  5. # 添加邮件主题
  6. msg["subject"] = subject

四、发送邮件

  1. smtp.send_message(msg, from_addr=f_user, to_addrs=t_user)

像这样上面这样写发送邮件,写一次还好,如果说一个项目中多个地方都需要用发送邮件,那就显得笨重了,所以呢,这个时候就需要给上面内容做一个封装,供项目中所有用到发送邮件的地方都可以直接调用.

一、首先,创建一个配置文件conf.ini

  1. [email]
  2. # smtp服务地址
  3. host = smtp.163.com
  4. # 端口
  5. port = 465
  6. # 发件人
  7. user = 163邮箱
  8. # 授权码
  9. pwd = 授权码
  10. # 收件人
  11. to_user = 收件人邮箱
  12. # 邮件正文
  13. content = 正文
  14. # 邮件主题
  15. subject = 主题

二、对发送邮件进行封装

封装了两个方法:
  1. send_text:发送文本邮件

  2. send_file:发送文件附件邮件

  3. 以下代码带[]的都是要从配置文件中获取的

  1. class SendEMail(object):
  2. """封装发送邮件类"""
  3. def __init__(self):
  4. # 第一步:连接到smtp服务器
  5. self.smtp_s = smtplib.SMTP_SSL(host=[host],
  6. port=[port])
  7. # 第二步:登陆smtp服务器
  8. self.smtp_s.login(user=[user],
  9. password=[pwd])
  10. def send_text(self, to_user, content, subject):
  11. """
  12. 发送文本邮件
  13. :param to_user: 对方邮箱
  14. :param content: 邮件正文
  15. :param subject: 邮件主题
  16. :return:
  17. """
  18. # 第三步:准备邮件
  19. # 使用email构造邮件
  20. msg = MIMEText(content, _subtype='plain', _charset="utf8")
  21. # 添加发件人
  22. msg["From"] = [user]
  23. # 添加收件人
  24. msg["To"] = to_user
  25. # 添加邮件主题
  26. msg["subject"] = subject
  27. # 第四步:发送邮件
  28. self.smtp_s.send_message(msg, from_addr=[user], to_addrs=to_user)
  29. def send_file(self, to_user, content, subject, reports_path, file_name):
  30. """
  31. 发送测试报告邮件
  32. :param to_user: 对方邮箱
  33. :param content: 邮件正文
  34. :param subject: 邮件主题
  35. :param reports_path: 测试报告路径
  36. :param file_name: 发送时测试报告名称
  37. """
  38. # 读取报告文件中的内容
  39. file_content = open(reports_path, "rb").read()
  40. # 2.使用email构造邮件
  41. # (1)构造一封多组件的邮件
  42. msg = MIMEMultipart()
  43. # (2)往多组件邮件中加入文本内容
  44. text_msg = MIMEText(content, _subtype='plain', _charset="utf8")
  45. msg.attach(text_msg)
  46. # (3)往多组件邮件中加入文件附件
  47. file_msg = MIMEApplication(file_content)
  48. file_msg.add_header('content-disposition', 'attachment', filename=file_name)
  49. msg.attach(file_msg)
  50. # 添加发件人
  51. msg["From"] = [user]
  52. # 添加收件人
  53. msg["To"] = to_user
  54. # 添加邮件主题
  55. msg["subject"] = subject
  56. # 第四步:发送邮件
  57. self.smtp_s.send_message(msg, from_addr=[user], to_addrs=to_user)

Python发送邮件以及对其封装的更多相关文章

  1. python发送邮件

    python发送邮件(无附件) ======================================================= #!/usr/bin/env python#coding ...

  2. python发送邮件及附件

    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...

  3. python 发送邮件实例

    留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例

  4. 解读Python发送邮件

    解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...

  5. python 发送邮件例子

    想到用python发送邮件 主要是服务器 有时候会产生coredump文件  ,然后因为脚本重启原因,服务器coredump产生后会重启 但是没有主动通知开发人员 想了下可以写个脚本一旦产生cored ...

  6. 利用python发送邮件

    找了很多使用python发送邮件的文章, 发现写的并不是太全, 导致坑特别多, 刚把这个坑跨过去, 在此记录下来 本代码使用163作为发送客户端, 接收邮箱随意 首先登录163邮箱, 开启POP3/S ...

  7. 用Python发送邮件

    文件:send.py # -*- coding:utf-8 -*- # ## 任兴测试用Python发送邮件 import os import sys import getopt import tim ...

  8. ETL过程跑完后,使用python发送邮件

    目标库中,如果有行数为0的表,使用python发送邮件 # -*- coding:utf-8 -*- # Author: zjc # Description:send monitor info to ...

  9. 【转】【Python】Python发送邮件(常见四种邮件内容)

    在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调 ...

随机推荐

  1. spark-Worker内部工作流程

  2. [error] hadoop:ls: `.': No such file or directory

    问题: 解决: https://stackoverflow.com/questions/28241251/hadoop-fs-ls-results-in-no-such-file-or-directo ...

  3. Bootstrap——导航条(navbar)

    导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多. 导航条(navbar)中有一个背景色.而且导航条可以是纯链接(类似导航).表单以及表单和导航一起结合等多种形式. 在制作一个基 ...

  4. linux与Windows进程控制

    进程管理控制 这里实现的是一个自定义timer用于统计子进程运行的时间.使用方式主要是 timer [-t seconds] command arguments 例如要统计ls的运行时间可以直接输入t ...

  5. error: Unexpected console statement (no-console)

    使用console.log 报错??这个错误是Vuejs - 使用ESLint检查代码而产生的 解决办法: 1.不处理,虽然有恼人的提示,但是实际上能使用console.log的 2.关掉ESLint ...

  6. 2019-10-10:渗透测试,基础学习,mysql语法基础,笔记

    mysql常用命令mysql -u用户名 -p,登录方式也称为,二进制方式exit 退出mysql 查看mysql版本select version(); 查看mysql所有数据库show dateba ...

  7. 常见 MIME 类型列表(转)

    本文转自:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MI ...

  8. tf serving的使用

    tensorflow_model_server --port=6000 --model_name=text_lstm --model_base_path=/home/guoyingmei/test/t ...

  9. java JDK安装包的获取与安装

    Java JDK 安装包获取和安装: JDK 1.8.211 官网下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...

  10. 【Android - 控件】之V - Toolbar的使用

    Toolbar是Android V7包中的一个控件,用来代替Action Bar作为界面的头部标题栏布局.Toolbar相对于Action Bar的特点是更加灵活,可以显示在任何位置. 首先先来看To ...