手把手教你用Python编写邮箱脚本引擎

news2025/1/12 22:01:08

版权声明:原创不易,本文禁止抄袭、转载需附上链接,侵权必究!

目录

    • 一、邮箱知识点简介
    • 二、常见邮箱开启SMTP服务
      • 2.1 QQ邮箱
      • ​2.2 163邮箱
      • 2.3 阿里云邮箱(企业版)
      • 2.4 Gmail邮箱
    • 三、Python编写邮箱引擎
      • 3.1 编写文本内容方法
      • ​3.2 编写表格内容方法
      • 3.3 编写图片内容方法
      • 3.4 编写附件上传方法
      • 3.5 编写html内容方法
      • 3.6 编写邮件发送方法
      • 3.7 编写邮件头方法
      • 3.8 其他工具方法
      • 3.8 测试用例
    • 四、邮箱引擎完整源码下载
    • 五、作者Info

一、邮箱知识点简介

邮箱是传输信息方式之一,个人,企业等都在使用,朋友之间发消息,注册/登录信息验证,订阅邮箱,企业招聘,向客户发送消息等都是邮箱的使用场景;邮箱有两个较重要的协议:SMTP和POP3,均位于OSI7层模型和TCP/IP5层模型的应用层,SMTP用于发邮件,默认端口是25,其他端口有465,994等,POP3用于收邮件,默认端口是110,其他端口有995等。

二、常见邮箱开启SMTP服务

2.1 QQ邮箱

QQ邮箱注册/登录入口

在这里插入图片描述


在这里插入图片描述

3、找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,并选择开启POP3/SMTP服务
在这里插入图片描述

4、验证密保
在这里插入图片描述

5、验证通过后将会获取授权码,请牢记此授权码,点击确认后将无法再次查看
在这里插入图片描述

6、QQ邮箱SMTP服务器地址:smtp.qq.com

​2.2 163邮箱

163邮箱注册/登录入口

1、登录163邮箱,点击左上角设置,选择POP3/SMTP/IMAP
在这里插入图片描述

2、开启POP3/SMTP服务
在这里插入图片描述

3、安全认证
在这里插入图片描述

4、验证通过后将会获取授权码牢记此授权码,点击确认后将无法再次查看
在这里插入图片描述

5、服务器地址:一般位于开启POP3/SMTP/IMAP页面的底部
在这里插入图片描述

2.3 阿里云邮箱(企业版)

阿里云企业邮箱由所在企业开通,不像QQ邮箱和163有授权码,直接在配置文件中填入阿里云企业邮箱账号和密码即可“
在这里插入图片描述

阿里云企业邮箱SMTP服务器相关配置信息如下:
在这里插入图片描述

2.4 Gmail邮箱

Gmail邮箱是Google邮箱,需要使用VPN或代理服务器软件方可访问注册,有需要的可去看相关教程

三、Python编写邮箱引擎

此篇邮箱脚本引擎采用Python3自带的标准库,分别是smtplib,email,logging,os

初始化邮箱引擎属性,包括日志,服务器主机,端口,发件人邮箱,发件人邮箱密码,收件人邮箱,邮箱内容:

def __init__(self, log, host, port, user, password, sender, receiver):
	self.log = log
	self.host = host
	self.port = port
	self.user = user
	self.password = password
	self.sender = sender
	self.receiver = receiver
	self.msg = MIMEMultipart()

3.1 编写文本内容方法

对发送文本内容进行utf-8编码:

def text_coding(self, text):
	new_text = MIMEText(text, 'plain', 'utf-8')
	self.msg.attach(new_text)

​3.2 编写表格内容方法

1、当表格只是单列表格,可根据需求调用该方法,部分代码如下:

def get_column(self, title, table_content):
	for value in table_content:
		html = '%s %s %s %s' % (html, "<li>", value, "</li>")

形参title是字符转类型,可以看成表格的标题,形参table_content是由字符串组成的列表,可以看成除了标题行之外表格的表格内容

2、当表格是多列表格,可根据需求调用该方法,部分代码如下:

def get_columns(self, title, table_content):
	for value in table_content:
		for key in value:
			html = '%s %s %s %s%s %s' % (html, "<li>", key, ":", value[key], "</li>")

形参title是字符转类型,可以看成表格的标题,形参table_content是由字符串组成的列表,可以看成除了标题行之外表格的表格内容

3、当表格需要调整最佳字符宽度时,可调用该方法,部分代码如下:

def get_table(self, title, content, good_len):
	for i in range(len(content)):
		content = content[i]
		# 第一行执行
		if i == 0:
			html_table = '%s %s' % (html_table, "<tr bgcolor='#70db93'>")
			if str_len:
				for key in content:
					html_table = '%s %s %s %s' % (
					html_table, "<td word-wrap='break-word' width=%s>" % (key_len), key, "</td>")
					html_table = '%s %s %s %s' % (
					html_table, "<td word-wrap='break-word' width=%s>" % (val_len), content[key], "</td>")
				continue

该方法是前面两种方法的进化版,根据需求调用

4、当需要写入各列的字段时可调用该方法,部分代码如下:

def table_content(self, title, list_field, list_cols):
		# 此处没有实际作用,炫一下列表解析式
		list_rows = [[row[i] for row in list_cols] for i in range(len(list_cols[0]))]
		# 将字段行插入到二维列表的第一行
		list_rows.insert(0, list_field)
		list_table = list_rows
		# 开始构造表格内容
		………………

title是字符转类型,可以看成表格的标题,list_field是一维列表/数组,list_cols是二维列表/数组

3.3 编写图片内容方法

邮件信息中包含图片,部分代码如下:

def image_content(self, filename):
	image = MIMEImage(open(filename, 'rb').read())
	# 这是邮箱打包图片特定的发送头
	image.add_header('Content-ID', '<image1>')
	self.msg.attach(image)

3.4 编写附件上传方法

邮件信息中包含附件,部分代码如下:

def zip_content(self, filename):
	basename = os.path.basename(filename)
	attachment = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
	# 这是邮箱打包附件特定的发送头
	attachment["Content-Type"] = 'application/octet-stream'

3.5 编写html内容方法

当邮件需要使用html格式时,可调用该方法,代码如下:

def html_coding(self, html):
	html_content = MIMEText(html, 'html', 'utf-8')
	self.msg.attach(html_content)

3.6 编写邮件发送方法

发送邮件可调用该方法,部分代码如下:

def send_email(self):
	"""发送邮件"""
	smtp = smtplib.SMTP()
	smtp.connect(self.host, int(self.port))
	smtp.set_debuglevel(1)
	smtp.login(self.user, self.password)
	#发送邮件
	………………

3.7 编写邮件头方法

配置邮件头信息,包括邮件主题、收件人等,部分代码如下:

def write_header(self, receiver, subject):
	self.msg['subject'] = Header(subject, 'utf-8').encode()
	self.msg['from'] = self.sender

3.8 其他工具方法

1、递推的求表格每行的最大长度:

def max_len(self, list_content):
	pass

3.8 测试用例

if __name__ == '__main__':

	ee = EmailEngine(log, 'host'),
					 'port'),
					 'user'),
					 'password'),
					'sender'),
					 'receiver'))
	receiver = 'receiver'
	subject = 'Happy every day!'
	ee.write_header(receiver, subject)
	msg = []
	msg.append('我亲爱的xxx:')
	msg.append('时间的流逝也挡不住………………')
	msg.append('我每天幻想着和你一起xxx')
	msg.append('缘尽缘灭……………………')
	ee.text_coding('\n'.join(msg))
	ee.send_email()

四、邮箱引擎完整源码下载

完整源码点我下载

五、作者Info

Author:小鸿的摸鱼日常,Goal:让编程更有趣!

专注于算法、爬虫,网站,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载 ,侵权必究!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Deferred Components-实现Flutter运行时动态下发Dart代码 | 京东云技术团队

导读 Deferred Components&#xff0c;官方实现的Flutter代码动态下发的方案。本文主要介绍官方方案的实现细节&#xff0c;探索在国内环境下使用Deferred Components&#xff0c;并且实现了最小验证demo。读罢本文&#xff0c;你就可以实现Dart文件级别代码的动态下发。 一、…

蓝精灵协会启动第二阶段的 NFT 连续发售活动

四个月前&#xff0c;蓝精灵协会推出了一款完全上链的 NFT 游戏&#xff0c;参与的钱包数量超过 85,000 个&#xff0c;并进入了前 100 Dapps 排名&#xff0c;成为了 Web3 领域的一匹黑马。 两周前&#xff0c;我们开始了第二阶段的连续销售活动&#xff0c;旨在建立一个前沿 …

privateGPT centos7环境下部署和研究

gihtub代码 https://github.com/imartinez/privateGPT 安装 llama-cpp-python-0.1.48安装报错 Could not build wheels for llama-cpp-python, , which is required to install pyproject.toml-based projects搜索&#xff08;结果较少&#xff09;&#xff1a; 从文章&#…

python数据分析与可视化学习简记(更新中)

numpy简介 numpy(Numerical Python)是python语言的扩展程序库&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;此外也针对数组运算提供了大量的数学函数库 作用 Numpy是一个运行速度非常快的数学库&#xff0c;主要用于数组计算 安装 可以使用如下命令在命令行安装即可 p…

CnOpenData舆情云数据

一、数据简介 网络舆情监测数据是决策者进行数据分析和决策处置的基础。舆情云数据覆盖81000 网站、5600 论坛、1000 平面媒体、2500万 微信账号、3亿 微博账号、300 网络视频、17000 境外媒体、1400万 自媒体账号、2500 新闻客户端、170 电视台 &#xff0c;数据来源全面精准&…

Spring Boot 多环境配置

Spring Boot 多环境配置 在实际开发中&#xff0c;应用程序通常需要在不同的环境中运行&#xff0c;例如开发环境、测试环境和生产环境。每个环境可能需要不同的配置&#xff0c;包括数据库连接、日志级别、接口地址等等。Spring Boot 提供了多种方法来处理多环境配置&#xf…

【数据分享】1901-2021年1km分辨率逐月平均气温栅格数据(全国/分省/免费获取)

气温数据是我们最常用的气象指标之一&#xff0c;之前我们给大家分享过1950-2022年0.1 x 0.1精度的逐月平均气温栅格数据和逐年平均气温栅格数据&#xff08;均可查询之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是精度更高的气温栅格数据——1901-2021年1km分…

小兔鲜项目----Pinia

目录 Pinia快速入门 什么是Pinia 添加Pinia到Vue项目 使用Pinia实现计数器案例 getters实现 action如何实现异步 storeToRefs Pinia的调试 项目起步-初始化项目并使用git管理 创建项目并精细化配置 src目录调整 git 管理项目 项目起步-配置别名路径联想提示 什么是…

Cesium教程(四):调用地形服务

Cesium提供了多种现有地形数据服务接口&#xff0c;并且支持自定义地形数据。 CesiumTerrainProvider&#xff1a;高精度全球地形数据&#xff0c;附有光照和水面效果。地形切片使用quantized-mesh v1.0格式&#xff0c;Cesium使用CesiumTerrainProvider API调用该服务。 Goo…

git bash下载gitee项目报错:no such file found

错误再现 解决方案&#xff1a;设置SSH Key 第一步&#xff1a;右击git bash here&#xff0c;命令行输入 $ git config --global user.name “hcshow” //配置用户名 $ git config --global user.email “hcitlifehotmail.com” //配置用户邮箱地址 此时可以查看用户名等信息…

【C++ 学习 ⑦】- 模板初阶(函数模板和类模板)

目录 一、前言 二、函数模板 2.1 - 基本概念和原理 2.2 - 定义格式 2.3 - 实例化详解 2.3.1 - 隐式实例化 2.3.2 - 显示实例化 2.4 - 模板参数的匹配原则 三、类模板 3.1 - 定义格式 3.2 - 实例化 参考资料&#xff1a; C函数模板&#xff08;模板函数&#xff09;详…

chatgpt赋能Python-python_for_line_in_f

Python for Line in F: 一种高效的文件读写方法 对于Python编程工程师来说&#xff0c;文件的读写操作是一项必备技能。但是&#xff0c;如果你还在使用传统的逐行读取方法&#xff0c;那么你可能需要了解一种更加高效的文件读写方法&#xff1a;Python for Line in F。 什么…

使用亚马逊云科技Amazon VPC Lattice简化服务间的连接、安全和监控

在亚马逊云科技re:Invent 2022中&#xff0c;亚马逊云科技介绍了Amazon VPC Lattice预览版&#xff0c;这是Amazon Virtual Private Cloud&#xff08;Amazon VPC&#xff09;的一项新功能&#xff0c;可通过一致的方式连接、保护和监控服务之间的通信。借助Amazon VPC Lattice…

十八、map和set

文章目录 一、关联式容器&#xff08;一&#xff09;序列式容器&#xff1a;&#xff08;二&#xff09;关联式容器&#xff1a; 二、树形结构与哈希结构&#xff08;一&#xff09;树型结构&#xff08;二&#xff09;哈希结构 三、键值对四、set五、multiset六、map&#xff…

有没有一种支持对象建模、数据库建模和低代码能力的工具,用来解放程序员生产力呢?

1. 简介 作为一个程序员&#xff0c;很多时候在面对项目开发工期短、任务重、功能复杂、压力大&#xff0c;同时还得迎合领导或者甲方的要求提供研发设计文档时&#xff0c;往往很苦恼&#xff0c;因为随着软件项目的迭代&#xff0c;很难保持输出与代码一致的数据模型和架构模…

Configuring MySQL for a SSD based SAN

Configuring MySQL for a SSD based SAN (Doc ID 2673662.1)正在上传…重新上传取消To Bottom In this Document APPLIES TO: MySQL Server - Version 5.6 and later Information in this document applies to any platform. GOAL Considering a Virtualized environment wit…

chatgpt赋能Python-python_ip归属地

Python IP归属地查询 在网络安全领域&#xff0c;IP地址归属地查询是一项非常重要的任务。很多时候我们需要知道某个IP地址的归属地以解决一些安全问题。Python语言在这方面也发挥了巨大的作用&#xff0c;有各种成熟的IP地址归属地查询库。在本文中&#xff0c;我们将介绍如何…

CMOS摄像头驱动分析-i2c驱动

CMOS摄像头驱动分析-i2c驱动 文章目录 CMOS摄像头驱动分析-i2c驱动设备树内容module_i2c_driver宏分析ov2640_i2c_driverov2640_probe 设备树内容 ov2640: camera0x30 {compatible "ovti,ov2640";reg <0x30>;status "okay";pinctrl-names "…

三、Mybatis从入门到入土

一、什么是Mybatis 1&#xff09;MyBatis 是一款优秀的持久层&#xff08;DAO层&#xff09;框架 2&#xff09;MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 3&#xff09;MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将…

程序员做爬虫有哪些痛点

很多网站会设置反爬虫机制&#xff0c;如验证码、IP封禁、请求频率限制等&#xff0c;这些机制会增加爬虫的难度。 程序员做爬虫时&#xff0c;可能会遇到以下难点&#xff1a; 1、反爬虫机制 许多网站会设置反爬虫机制&#xff0c;如验证码、IP封禁、请求频率限制等&#x…