python开发基于SMTP协议的邮件代发服务
写在这篇文章前照例给大家灌输点名词解释,理论知识,当然已经很熟悉的同学可以往下翻直接看干货
1. 什么是SMTP
SMTP即简单传输协议(Simple Mail Transfer Protocol),和http协议一样同样是出于osi七层中的应用层,作为一种电子邮件传输的标准而存在,实现了SMTP的邮箱服务端可以成为SMTP服务器,也叫邮件发送服务器,顾名思义,只管发送邮件,不管接受邮件。
2.IMAP,POP3,SMTP的关系
正如上面说的,SMTP只是作为发送邮件的标准,真正的邮件都存在于邮件服务商的邮件服务器里,那如果我不想登陆服务商的官方平台,用三方软件类似于我们常见的Foxmail,outlook等等软件,那你能够在这些软件上看到你这个邮箱账号下所有的邮件就是基于IMAP或 POP3协议,邮箱服务器准许第三方软件获取邮件,所以实现了IMAP,POP3这两种接受邮件协议的服务端称为邮件接受服务器,刚好就与SMTP的发送服务器配合构成了一个完整的邮件服务
正片开始之前还是介绍些背景吧,公司要做一个代发邮件的功能来对接每个业务子系统,为用户实现一键发送邮件的功能,当然基于业务而言,上我也不能就简单的实现一个发送邮件的脚本或是工具给各个子系统使用,包括发件日志监控,通用邮箱非法内容筛选,统计分析等等内容,但这这些并不是我们的主题。
步骤一 先了解下SMTP协议数据组装,以下是使用python的email库实现了邮件数据打包。
import base64
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText from_email = 'ailinyijiu@qq.com'
to_email = ['ailingyijiu@qq.com']
cc_email = ['ailingyijiu@qq.com']
bcc_email = ['ailingyijiu@qq.com']
body = 'ailinyijiu@qq.com' msg = MIMEMultipart('alternative')
msg['From'] = from_email # 发件人
msg['To'] = ','.join(to_email) # 收件人
msg['Cc'] = ','.join(cc_email) # 抄送人
msg['Subject'] = '邮件标题'
msg.attach(MIMEText(body, 'html', 'utf-8')) # 内容以html形式传输
attachment = MIMEApplication('bytes') # 定义附件,需要传入附件的二进制形式
attachment.add_header('Content-Disposition', 'attachment',
filename='=?utf-8?b?' + base64.b64encode('我的附件'.encode('UTF-8')) + '?=')
msg.attach(attachment)
msg = msg.as_string()
打包之后的数据格式如下:

仔细发现SMTP协议的数据格式和http的数据格式大相径庭,这是因为对于传输多个文件或其他多媒体内容,http协议同样也使用了是最开始为邮件服务的MIME协议
在上面的图片中 MIME 主类型为 multipart 子类型为 mixed 代表的是将每一个附件和邮件内容混合 区分成不同块,通过boundary划分,其他的类型包括 alternative:内容包括普通文本和超文本(也就是html);在http中用到的还有 form-data用于form表单。相同点就是 都是用boundary来区分不同的提交内容
今天不想写了,未完待续。。。
python开发基于SMTP协议的邮件代发服务的更多相关文章
- 使用java语言基于SMTP协议手写邮件客户端
使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...
- 用c++开发基于tcp协议的文件上传功能
用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...
- Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试
脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试 by:授客 QQ:1033553122 目的 实现基于http协议的流媒体在线视频播放,服务器性能测试脚本,模拟用户浏览器方式在线播放 ...
- .net平台 基于 XMPP协议的即时消息服务端简单实现
.net平台 基于 XMPP协议的即时消息服务端简单实现 昨天抽空学习了一下XMPP,在网上找了好久,中文的资料太少了所以做这个简单的例子,今天才完成.公司也正在准备开发基于XMPP协议的即时通讯工具 ...
- 基于公网smtp协议实现邮件服务器
刚开始做邮件服务器开发,一切都是茫然的.在书上网上都很难找到一套完整的邮件服务器开发教程.在个人的摸索中碰到了很多蛋疼得问题.现终于完成了,将我的开发经验分享给大家. 开发环境:vs2012 mfc ...
- 基于SMTP协议的CMD命令邮件发送
网上有不少的这类的文章,以是参照这些文章后,自己实际运行的结果.系统使用的是WIN7 旗舰版. 1.打开CMD命令后,连接到SMTP服务器,如连接到QQ的SMTP服务,输入命令 telnet smtp ...
- C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送
最近在用outlook同步邮件.对邮件协议有一点兴趣.于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发. 一:SMTP协议 1.什么是SMTP协议: SMTP目前 ...
- python实现基于smtp发送邮件
[前言] 在某些项目中,我们需要实现发送邮件的功能,比如: 爬虫结束后,发送邮件通知 定时发送邮件提醒待办事项 某项业务逻辑触发邮件通知 今天我们就分享如何基于smtp借助163邮箱来发送邮件 [实现 ...
- python测试基于websocket协议的即时通讯接口
随着html5的广泛应用,基于websocket协议的即时通讯有了越来越多的使用场景,本文使用python中的websocket-client模块来做相关的接口测试 import webclient ...
随机推荐
- pikachu——暴力破解
前述: 前面学习了sqli-labs 和 DVWA,也算是初步涉足了web漏洞,了解了一些web漏洞的知识.所以在pikachu上面,会更加仔细认真,把前面没有介绍到的知识点和我一边学习到的新知识再补 ...
- MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合
2.1 案例背景 在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模.在这种情况下,可以建立BP神经网络表达这些非线性系统.该方法把未知系统看成是一个黑箱,首先用 ...
- Python3 面向对象之:多继承
多继承 class ShenXian: # 神仙 def fei(self): print("神仙都会⻜") class Monkey: # 猴 def chitao(self): ...
- Linux 文件系统及 ext2 文件系统
linux 支持的文件系统类型 Ext2: 有点像 UNIX 文件系统.有 blocks,inodes,directories 的概念. Ext3: Ext2 的加强版,添加了日志 ...
- Python专题——五分钟带你了解map、reduce和filter
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题第6篇文章,给大家介绍的是Python当中三个非常神奇的方法:map.reduce和filter. 不知道大家看到ma ...
- 选择tomcat时候提示Project facet Java version 1.8 is not supported.解决办法
是因为jdk版本不一致导致的,如何解决? 方法一: 选中项目Properties,选择Project Facets,右击选择Java,Change Version 方法二: 在项目的目录下有一个.se ...
- (翻译) 使用Unity进行AOP对象拦截
Unity 是一款知名的依赖注入容器( dependency injection container) ,其支持通过自定义扩展来扩充功能. 在Unity软件包内 默认包含了一个对象拦截(Interce ...
- Django-rest-framework源码分析(三)
APIView(二) 在APIView执行dispatch()方法的时候,它不仅做了分发函数的功能,还进行了一系列的校验. Django的全局校验一般写在中间件中,但是rest_framework于D ...
- 福利,OpenCV最新中文版官方教程来了
OpenCV 中文版官方教程来了. OpenCV是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解Op ...
- 使用SlimYOLOv3框架实现实时目标检测
介绍 人类可以在几毫秒内在我们的视线中挑选出物体.事实上,你现在就环顾四周,你将观察到周围环境并快速检测到存在的物体,并且把目光回到我们这篇文章来.大概需要多长时间? 这就是实时目标检测.如果我们能让 ...