对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. Spring简单的示例

    参考资料:https://how2j.cn/k/spring/spring-ioc-di/87.html.https://www.w3cschool.cn/wkspring/dgte1ica.html ...

  2. thinkphp 6.0 在 initialize 中重定向无效

    thinkphp 6.0 在 initialize 中重定向无效 改用 header() 函数 实例: // header('location:/index.php/模块/控制器/方法'); head ...

  3. ES6入门十二:Module(模块化)

    webpack4打包配置babel7转码ES6 Module语法与API的使用 import() Module加载实现原理 Commonjs规范的模块与ES6模块的差异 ES6模块与Nodejs模块相 ...

  4. PHP是怎样重载的

    PHP 的重载跟 Java 的重载不同,不可混为一谈.Java 允许类中存在多个同名函数,每个函数的参数不相同,而 PHP 中只允许存在一个同名函数.例如,Java 的构造函数可以有多个,PHP 的构 ...

  5. java常用简略语含义

    首先这些对象都应用都是一些单词的简称,也是一种应用思想,故其他语言也可以使用,在Java里比较常见这些对象吧.下面来一一解释. 一.POJO(Plain Ordinary Java Object). ...

  6. react一写工具

    动画库:React-transition-group ui框架:Ant Design

  7. python_08

    一.作业 ''' 主页: 图标地址.下载次数.大小.详情页地址 详情页: 游戏名.好评率.评论数.小编点评.下载地址.简介.网友评论.1-5张截图链接地址. https://www.wandoujia ...

  8. Jib插件构建镜像push到阿里云镜像仓库

    一.前言 Jib:Google开源的Java容器化工具 可作为插件快速集成到项目中,构建镜像,实现 Java 应用容器化 下面贴出一张从网上看到的Jib描述~ 二.利用Jib插件构建镜像push到阿里 ...

  9. Component 和 PureComponent 的区别;复制demo,肉眼可以的区别

    React.PureComponent它用当前与之前 props 和 state 的浅比较覆写了 shouldComponentUpdate() 的实现.简单来说,就是PureComponent简单实 ...

  10. linux runlevel运行级别

    1.linux通过设定runlevel来设定系统使用不同的服务启动,从而使得linux运行的环境有所不同. 2.当系统启动后会按照以下步骤完成初始化:运行/sbin/init程序加载器配置文件/etc ...