写在这篇文章前照例给大家灌输点名词解释,理论知识,当然已经很熟悉的同学可以往下翻直接看干货

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协议的邮件代发服务的更多相关文章

  1. 使用java语言基于SMTP协议手写邮件客户端

    使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...

  2. 用c++开发基于tcp协议的文件上传功能

    用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...

  3. Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试

    脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试 by:授客 QQ:1033553122   目的 实现基于http协议的流媒体在线视频播放,服务器性能测试脚本,模拟用户浏览器方式在线播放 ...

  4. .net平台 基于 XMPP协议的即时消息服务端简单实现

    .net平台 基于 XMPP协议的即时消息服务端简单实现 昨天抽空学习了一下XMPP,在网上找了好久,中文的资料太少了所以做这个简单的例子,今天才完成.公司也正在准备开发基于XMPP协议的即时通讯工具 ...

  5. 基于公网smtp协议实现邮件服务器

    刚开始做邮件服务器开发,一切都是茫然的.在书上网上都很难找到一套完整的邮件服务器开发教程.在个人的摸索中碰到了很多蛋疼得问题.现终于完成了,将我的开发经验分享给大家. 开发环境:vs2012 mfc ...

  6. 基于SMTP协议的CMD命令邮件发送

    网上有不少的这类的文章,以是参照这些文章后,自己实际运行的结果.系统使用的是WIN7 旗舰版. 1.打开CMD命令后,连接到SMTP服务器,如连接到QQ的SMTP服务,输入命令 telnet smtp ...

  7. C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送

    最近在用outlook同步邮件.对邮件协议有一点兴趣.于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发.    一:SMTP协议  1.什么是SMTP协议:       SMTP目前 ...

  8. python实现基于smtp发送邮件

    [前言] 在某些项目中,我们需要实现发送邮件的功能,比如: 爬虫结束后,发送邮件通知 定时发送邮件提醒待办事项 某项业务逻辑触发邮件通知 今天我们就分享如何基于smtp借助163邮箱来发送邮件 [实现 ...

  9. python测试基于websocket协议的即时通讯接口

    随着html5的广泛应用,基于websocket协议的即时通讯有了越来越多的使用场景,本文使用python中的websocket-client模块来做相关的接口测试 import webclient ...

随机推荐

  1. 如何找回微信小程序源码?2020年微信小程序反编译最新教程 小宇子李

    前言:在网上看了找回微信小程序源码很多教程,都没法正常使用.微信版本升级后,会遇到各种报错, 以及无法获取到wxss的问题.查阅各种资料,最终解决,于是贴上完整的微信小程序反编译方案与教程. 本文章仅 ...

  2. 032.核心组件-kube-proxy

    一 kube-proxy原理 1.1 kube-proxy概述 Kubernetes为了支持集群的水平扩展.高可用性,抽象出了Service的概念.Service是对一组Pod的抽象,它会根据访问策略 ...

  3. SpringCloud之Hystrix服务降级入门全攻略

    理论知识 Hystrix是什么? Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案.这说的有点儿太官方了,它的功能主要 ...

  4. kafka使用指南

    快速开始 本教程假设您刚刚开始,并且没有现有的Kafka或ZooKeeper数据.由于Kafka控制台脚本对于基于Unix和Windows的平台是不同的,因此在Windows平台上使用bin\wind ...

  5. Python 之装饰器

    Python 的装饰器可谓是提高开发效率的一大利器.然而初学装饰器的时候感觉很难理解,因为除了 Python 之外没听说哪个语言有这种东西. 而且网上看的很多解释看似容易理解,但只能很快理解了装饰器能 ...

  6. [深入学习C#] 匿名函数、委托和Lambda表达式

    匿名函数 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情).匿名函数转换的计算取 ...

  7. greenplum数据库常用操作

    1. 场景描述 greenplum集群部署好后,软件老王在实际使用过程中碰到一些问题,简单记录下,希望能帮到有需要的朋友. 2 .解决方案 2.1 gpcc监控地址 说明:非常重要,greenplum ...

  8. hdu1171kmp果题

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1711/ #include<bits/stdc++.h> using namespace std; t ...

  9. JavaScript----DOM和事件的简单学习

    ##DOM简单学习 *  功能:控制html文档的内容 *  代码:获取页面标签(元素)对象:Element *  document.getElementById("id值"):通 ...

  10. 3分钟了解GPT Bert与XLNet的差异

    译者 | Arno 来源 | Medium XLNet是一种新的预训练模型,在20项任务中表现优于BERT,且有大幅度的提升. 这是什么原因呢? 在不了解机器学习的情况下,不难估计我们捕获的上下文越多 ...