对Python发送邮件进行封装

Python发送邮件分为四步

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

导入所需要的包

import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart

一、连接到smtp服务器

方式一:不使用ssl加密

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

方式二:使用ssl加密

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

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

二、登陆smtp服务器

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

三、准备邮件

①:发送文本邮件

1、准备内容

f_user = "发件人地址"
t_user = "收件人地址"
content = "邮件的正文"
subject = "邮件的主题"

2、使用email构造邮件

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

1、准备内容

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

2、使用email构造邮件

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

msg = MIMEMultipart()

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

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

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

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

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

# 添加发件人
msg["From"] = f_user
# 添加收件人
msg["To"] = t_user
# 添加邮件主题
msg["subject"] = subject

四、发送邮件

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

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

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

[email]
# smtp服务地址
host = smtp.163.com
# 端口
port = 465
# 发件人
user = 163邮箱
# 授权码
pwd = 授权码
# 收件人
to_user = 收件人邮箱
# 邮件正文
content = 正文
# 邮件主题
subject = 主题

二、对发送邮件进行封装

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

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

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

class SendEMail(object):
"""封装发送邮件类""" def __init__(self):
# 第一步:连接到smtp服务器
self.smtp_s = smtplib.SMTP_SSL(host=[host],
port=[port])
# 第二步:登陆smtp服务器
self.smtp_s.login(user=[user],
password=[pwd]) def send_text(self, to_user, content, subject):
"""
发送文本邮件
:param to_user: 对方邮箱
:param content: 邮件正文
:param subject: 邮件主题
:return:
"""
# 第三步:准备邮件
# 使用email构造邮件
msg = MIMEText(content, _subtype='plain', _charset="utf8")
# 添加发件人
msg["From"] = [user]
# 添加收件人
msg["To"] = to_user
# 添加邮件主题
msg["subject"] = subject
# 第四步:发送邮件
self.smtp_s.send_message(msg, from_addr=[user], to_addrs=to_user) def send_file(self, to_user, content, subject, reports_path, file_name):
"""
发送测试报告邮件
:param to_user: 对方邮箱
:param content: 邮件正文
:param subject: 邮件主题
:param reports_path: 测试报告路径
:param file_name: 发送时测试报告名称
"""
# 读取报告文件中的内容
file_content = open(reports_path, "rb").read()
# 2.使用email构造邮件
# (1)构造一封多组件的邮件
msg = MIMEMultipart()
# (2)往多组件邮件中加入文本内容
text_msg = MIMEText(content, _subtype='plain', _charset="utf8")
msg.attach(text_msg)
# (3)往多组件邮件中加入文件附件
file_msg = MIMEApplication(file_content)
file_msg.add_header('content-disposition', 'attachment', filename=file_name)
msg.attach(file_msg)
# 添加发件人
msg["From"] = [user]
# 添加收件人
msg["To"] = to_user
# 添加邮件主题
msg["subject"] = subject
# 第四步:发送邮件
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. Python日志模块logging简介

    日志处理是项目的必备功能,配置合理的日志,可以帮助我们了解系统的运行状况.定位位置,辅助数据分析技术,还可以挖掘出一些额外的系统信息. 本文介绍Python内置的日志处理模块logging的常见用法. ...

  2. javascript 使用 setInterval 实现倒计时

    javascript 使用 setInterval 实现倒计时 var timer = setInterval(function () { console.log(valid_time); if (v ...

  3. win10添加启动项目

    Win10启动文件夹一般位于C:\ProgramData\Microsoft\Windows\Start Menu(开始菜单)\Programs(程序)\StartUp(启动)目录,我们主要讲希望添加 ...

  4. Install zabbix

    - name: Create dir to keep install file file: path=/opt/pacheage state=directory follow=yes force=ye ...

  5. Openlayers Overlay加载gif图片

    说明: 项目中使用vector图层做图片撒点功能,发现加载gif没有效果.网上查找资料发现,openlayers不支持gif图片样式. 后面采用overlay的方式,gif图片赋值给DOM元素 解决方 ...

  6. PL真有意思(五):数据类型

    前言 现在大多数程序设计语言中都有表达式和/或对象的类型概念.类型起着两种主要作用: 为许多操作提供了隐含的上下文信息,使程序员可以在许多情况下不必显示的描述这种上下文.比如int类型的两个对象相加就 ...

  7. Linux配置SSH和Xshell连接服务器

    >>>>>Ubuntu安装和配置ssh教程 SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑 上是否安装了 ...

  8. 基于Galera Cluster多主结构的Mysql高可用集群

    Galera Cluster特点 1.多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的 2.同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失 3.并发复制:从 ...

  9. Java工作流系统-驰骋BPM工作流 引擎的工作模式

    关键字:驰骋工作流引擎 流程引擎工作模式 流程中间件工作模式  工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流bpm工作流系统  java工作流主流框架  自定义工 ...

  10. 2019-9-24:渗透测试,JavaScript数据类型基础学习

    JavaScript 数据类型 值类型(基本类型):字符串(String).数字(Number).布尔(Boolean).对空(Null).未定义(Undefined).Symbol. 引用数据类型: ...