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

这篇具有很好参考价值的文章主要介绍了手把手教你用Python编写邮箱脚本引擎。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、邮箱知识点简介

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

二、常见邮箱开启SMTP服务

2.1 QQ邮箱

QQ邮箱注册/登录入口

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


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

3、找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,并选择开启POP3/SMTP服务
手把手教你用Python编写邮箱脚本引擎

4、验证密保
手把手教你用Python编写邮箱脚本引擎

5、验证通过后将会获取授权码,请牢记此授权码,点击确认后将无法再次查看
手把手教你用Python编写邮箱脚本引擎

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

​2.2 163邮箱

163邮箱注册/登录入口

1、登录163邮箱,点击左上角设置,选择POP3/SMTP/IMAP
手把手教你用Python编写邮箱脚本引擎

2、开启POP3/SMTP服务
手把手教你用Python编写邮箱脚本引擎

3、安全认证
手把手教你用Python编写邮箱脚本引擎

4、验证通过后将会获取授权码牢记此授权码,点击确认后将无法再次查看
手把手教你用Python编写邮箱脚本引擎

5、服务器地址:一般位于开启POP3/SMTP/IMAP页面的底部
手把手教你用Python编写邮箱脚本引擎

2.3 阿里云邮箱(企业版)

阿里云企业邮箱由所在企业开通,不像QQ邮箱和163有授权码,直接在配置文件中填入阿里云企业邮箱账号和密码即可“
手把手教你用Python编写邮箱脚本引擎

阿里云企业邮箱SMTP服务器相关配置信息如下:
手把手教你用Python编写邮箱脚本引擎

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!

版权说明:本文禁止抄袭、转载 ,侵权必究!文章来源地址https://www.toymoban.com/news/detail-458367.html

到了这里,关于手把手教你用Python编写邮箱脚本引擎的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你用python演奏音乐(以富士山下为例)

    目录 1.代码 2.文本 3.效果图  这两天,我非常无聊,琢磨出了十二平均律,并利用mido库进行编写,实现了利用python演奏音乐。废话不多说了,直接上代码,供诸位大佬把玩。  

    2024年02月12日
    浏览(48)
  • 手把手教你用python一键抢12306火车票(附代码)

    哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕… 然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现一票难求!想回趟家真难! 那么作为程序猿的你,当然要用程序猿的方式来抢票!下面分享用python来抢票! 城市cookie可根据具体需求自

    2024年02月15日
    浏览(72)
  • 手把手教你用Python编一个《我的世界》 2.材质及第一人称

    本次,我们将实现这样一个效果: 首先,导入ursina模块 创建app 定义Block类,继承自Button 然后,我们需要一个天空 定义Sky类 因为我们所有的方块包括天空都需要图片材质,所以我们在程序开头写以下代码: 然后咱们先创建一个超平坦地形,厚度就只有1层吧,因为方块多了很

    2024年02月04日
    浏览(66)
  • 手把手教你用代码画架构图

    作者:京东物流 覃玉杰 本文将给大家介绍一种简洁明了软件架构可视化模型——C4模型,并手把手教大家如何使用 代码 绘制出精美的C4架构图。 阅读本文之后,读者画的架构图将会是这样的: 注:该图例仅作绘图示例使用,不确保其完整性、可行性。 C4是软件架构可视化

    2024年02月04日
    浏览(49)
  • 快收藏!手把手教你用AI绘画

    点个关注👆跟腾讯工程师学技术 最近看到一篇有趣的文章,一副名为《太空歌剧院》(如下图)的艺术品在某美术比赛上,获得了第一名的成绩, 有意思的是这件作品是通过AI来实现的画作, 顿时觉得非常神奇。结合近期科技媒体频频报道的AI作画爆火现象,深入了解了下

    2024年02月09日
    浏览(47)
  • 手把手教你用AirtestIDE无线连接手机

    一直以来,我们发现同学们都挺喜欢用无线的方式连接手机,正好安卓11出了个无线连接的新姿势,我们今天就一起来看看,如何用AirtestIDE无线连接你的Android设备~ 当 手机与电脑处在同一个wifi 下,即可尝试无线连接手机了,但是这种方式受限于网络连接的稳定性,可能会出

    2023年04月18日
    浏览(53)
  • 手把手教你用 Jenkins 自动部署 SpringBoot

    CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。 CI/CD 的核心概念可以总结为三点: 持续集成 持续交付 持续部署 CI/CD 主要针对在集成新代码时所引发的问题(俗称\\\"集成地狱\\\")。 为什么会有集成地狱这个“雅称”呢?大家想想我们一个项目部署的

    2024年02月02日
    浏览(49)
  • 手把手教你用jmeter做压力测试(详图)

    压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤,下面我带大家来使用一款压力测试工

    2024年02月02日
    浏览(46)
  • 手把手教你用video实现视频播放功能

    哈喽。大家好啊 今天需要做一个视频播放列表,让我想到了video的属性 下面让我们先看看实现效果 这里是我的代码 width是当前播放页面的宽度 height是当前播放页面的高度 Controls属性用就是控制栏那些了 比如播放按钮 暂停按钮 autoplay是指的是自动播放 poster是指的是初始化进

    2024年02月12日
    浏览(50)
  • 手把手教你用MindSpore训练一个AI模型!

    首先我们要先了解深度学习的概念和AI计算框架的角色( https://zhuanlan.zhihu.com/p/463019160 ),本篇文章将演示怎么利用MindSpore来训练一个AI模型。和上一章的场景一致,我们要训练的模型是用来对手写数字图片进行分类的LeNet5模型 请参考( http://yann.lecun.com/exdb/lenet/ )。 图1 M

    2024年02月04日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包