Python发送邮件以及对其封装
对Python发送邮件进行封装
Python发送邮件分为四步
- 连接到smtp服务器
- 登陆smtp服务器
- 准备邮件
- 发送邮件
导入所需要的包
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 = 主题
二、对发送邮件进行封装
封装了两个方法:
send_text:发送文本邮件
send_file:发送文件附件邮件
以下代码带[]的都是要从配置文件中获取的
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发送邮件以及对其封装的更多相关文章
- python发送邮件
python发送邮件(无附件) ======================================================= #!/usr/bin/env python#coding ...
- python发送邮件及附件
今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...
- python 发送邮件实例
留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例
- 解读Python发送邮件
解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...
- python 发送邮件例子
想到用python发送邮件 主要是服务器 有时候会产生coredump文件 ,然后因为脚本重启原因,服务器coredump产生后会重启 但是没有主动通知开发人员 想了下可以写个脚本一旦产生cored ...
- 利用python发送邮件
找了很多使用python发送邮件的文章, 发现写的并不是太全, 导致坑特别多, 刚把这个坑跨过去, 在此记录下来 本代码使用163作为发送客户端, 接收邮箱随意 首先登录163邮箱, 开启POP3/S ...
- 用Python发送邮件
文件:send.py # -*- coding:utf-8 -*- # ## 任兴测试用Python发送邮件 import os import sys import getopt import tim ...
- ETL过程跑完后,使用python发送邮件
目标库中,如果有行数为0的表,使用python发送邮件 # -*- coding:utf-8 -*- # Author: zjc # Description:send monitor info to ...
- 【转】【Python】Python发送邮件(常见四种邮件内容)
在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调 ...
随机推荐
- C++中对封装的语法支持——静态成员
静态成员(变量与函数) 1.静态成员变量的语法.访问.特点(共享.类内声明类外初始化) 静态成员变量在class中只做声明,并没有初始化所以不会分配内存. (1) 非静态成员变量必须通过对象来访问. ...
- Unity加载AB包
Unity制作游戏AB包 需要注意的是在游戏场景运行的情况下,不能编译AB包,不运行的情况下编译AB包需要使用Unity的扩展菜单功能,首先需要建立菜单用来编译AB包. 1.建立AB包的名字,首先选中 ...
- 用IDEA导入Eclipse的JavaWEB项目
1.File----Open 2.选择项目路径 点击OK,这时候会弹出一个窗口,让你选择本窗口打开项目还是新建一个窗口,这个随意. 3.添加WEB框架 4.添加各种自己需要的jar包 5.添加Tomc ...
- Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)
1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...
- lqb 基础练习 十六进制转十进制
基础练习 十六进制转十进制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~ ...
- nyoj 1364-治安管理 (INT_MAX)
1364-治安管理 内存限制:128MB 时间限制:3000ms 特判: No 通过数:6 提交数:6 难度:2 题目描述: SZ市是中国改革开放建立的经济特区,是中国改革开放的窗口,已发展为有一定影 ...
- 力扣(LeetCode)查找常用字符 个人题解
给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表.例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 ...
- Python第五天 列表练习 元组类型 字典类型 小购物车练习
# 反转 reverse# l=['lili','asdf','qwer','80000']# l.reverse()# print(l) # ['80000', 'qwer', 'asdf', 'l ...
- vue cli3.0 封装组件全局引入js文件并发布到npm
首先用 vue create创建一个项目 当前的项目目录是这样的: 首先需要创建一个 packages 目录,用来存放组件 然后将 src 目录改为 examples 用作示例 二.修改配置 启动项目 ...
- 【并发编程】Java对并发编程的支持历史
本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 本文转载,原文请点击链接 本章主要对Java并发(Con ...