上篇博客我们简单介绍了电子邮件的发送和接收过程,对参与其中的邮件服务器,邮件客户端软件,邮件传输协议也有简单的介绍。我们知道电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递必须遵守的规则便是邮件传输协议。SMTP协议定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。POP3/IMAP协议定义了邮件客户端软件和POP3邮件服务器的通信规则。这篇博客我们就来手工体验SMTP和POP3协议的奥秘。

1、使用Smtp协议手工发送邮件

  SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。SMTP协议的通信双方采用一问一答的命令/响应形式进行对话,SMTP协议分为标准SMTP协议和扩展SMTP协议,标准SMTP协议是1982年在RFC821 文档中定义的,而扩展SMTP协议是1995年在RFC1869 文档中定义的。扩展SMTP协议在标准 SMTP协议基础上的改动非常小,主要增加了邮件安全方面的认证功能,现在我们说的SMTP协议基本上都是扩展SMTP协议。

  RFC1869文档参考如下:https://tools.ietf.org/html/rfc1869

  SMTP 协议中一共定义了18条命令,但是发送一封电子邮件的过程通常只需要6条命令,我将这6调命令/响应的语法格式总结如下:

  

  大家可能光看这些命令不太清楚,下面我总结了一下使用Smtp协议手工发送邮件的步骤:

  

  ①、和SMTP服务器建立连接,telnet smtp.163.com 25。这条命令是和163邮箱建立连接,如果是和QQ,那么将163换成qq即可,同理别的邮箱也是一样。后面的数字25表示SMTP服务器的端口号。

  ②、ehlo 发件人用户名。这没什么好说的,就是告诉SMTP服务器发送者的用户名。

  ③、选择登录认证方式,一般我们在第二步执行完后,会提示有几种认证方式,我们一般选择的是login。即输入命令:auth login

  ④、分别输入经过Base64加密后的用户名和密码。注意必须是要经过 Base64加密后的用户名和密码,大家可以网上在线转,也可以用后面给的代码进行转换。

  ⑤、指明邮件的发送人和收件人

    mail from:<xxx@163.com>

    rcpt to:<xxx@qq.com>

  ⑥、输入data命令,然后编写要发送的邮件内容,邮件的编写格式规则如下:

    第一步:输入data

    第二步:输入邮件内容 

from:<xxx@163.com>    ----邮件头发件人地址
to:<xxx@qq.com>      ----邮件头收件人地址
subject:hello world    ----邮件头主题
               -----空行
This is the first email sent by hand using the SMTP protocol         ----邮件的具体内容

  ⑦、输入“.”表示邮件内容输入完毕

  ⑧、输入quit命令断开与邮件服务器的连接

  下面我用动图的形式给大家展示用Smtp协议手工发送邮件的前面三个步骤:

  

  上面我执行到第4步,剩下的步骤我就直接截图了:

  

  至此,我们一封邮件便发出去了,我们先登陆到QQ邮箱查看(后面我们通过POP3服务器来查收):

  

    

2、SMTP发送邮件遇到问题

  ①、执行 telent smtp.163.com 25 命令时,报如下错误:

  

  解决办法是:控制面板----程序------启动或关闭 Windows 功能----将Telnet勾上,然后点击确定即可

  

  ②、用户名和密码必须要base64加密,在线网站:http://www1.tc711.com/tool/BASE64.htm

  ③、每一步骤之间输入命令要尽量快,不然会自动断开连接

  ④、我上面是和163邮箱链接的,如果是和qq邮箱连接,会有一些问题。首先第一步建立连接为 telnet smtp.qq.com 587,端口号为587,不是25。还有第三步,选择认证方式,在执行 auth login之前,先执行:starttls。还有第四步,输入用户名和授权码,而不是用户名和密码,授权码的获取可以参考:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

  ⑤、输入邮件内容时,空行不要忘记了,还有结束输入是以“.”结束的。 

3、使用POP3协议手工接收邮件    

  邮件服务商专门为每个用户申请的电子邮箱提供了专门的存储空间,SMTP 服务器将接收到的邮件保存到相应用户的存储空间。用户要从邮件服务提供商提供的电子邮箱中获取自己的电子邮件,那么就需要POP3 邮件服务器来完成。

  POP3协议:全称为 Post Office Protocol,它定义了邮件客户端程序和POP3邮件服务器的通信规则。

  下面我们演示用POP3协议手工接收邮件:

  

  这是在 163 邮箱的一份邮件。(这里没有用qq邮箱演示是因为qq有很多安全限制,步骤比较繁琐,大家遇到问题了可以留言问我)

  第一步:用telnet 连接POP3的163邮箱服务器

  

  接下来收取邮件:

  

相关命令的详细解释如下:

  

4、总结

  上面就是通过SMTP协议发送邮件,以及通过POP3协议收取邮件的全部过程。上面我们操作的主体都是163邮箱,换成sina,sohu等邮箱都是可以的。除了qq邮箱会有各种问题,其中一些问题我已经在文中给出了,大家如果还遇到什么问题,欢迎留言交流。

  理解手工实现SMTP和POP3收发邮件是很重要的,下篇博客会讲如何通过代码来实现收发邮件,以及后面内嵌图片,网站等花式写邮件的讲解。如果我们这篇博客理解透彻了,后面的内容理解起来就会事半功倍了。

邮件实现详解(二)------手工体验smtp和pop3协议的更多相关文章

  1. 邮件实现详解(四)------JavaMail 发送(带图片和附件)和接收邮件

    好了,进入这个系列教程最主要的步骤了,前面邮件的理论知识我们都了解了,那么这篇博客我们将用代码完成邮件的发送.这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进 ...

  2. pika详解(二) BlockingConnection

    pika详解(二) BlockingConnection   本文链接:https://blog.csdn.net/comprel/article/details/94592348 版权 Blocki ...

  3. .NET DLL 保护措施详解(二)关于性能的测试

    先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...

  4. PopUpWindow使用详解(二)——进阶及答疑

      相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  5. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  6. logback -- 配置详解 -- 二 -- <appender>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  7. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  8. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  9. Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)

    View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇  ...

随机推荐

  1. 使用XmlWriter创建XML文件

    using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Xml ...

  2. centos 7 && dotnet core 2.0 && nginx && supervisor

    前提 系统:centos 7 目录:/home/wwwroot/www.wuball.com dotnet core 2.0 官方指引 sudo rpm --import https://packag ...

  3. 第二周C++学习总结

    经过这个星期的学习,认识C语言C++语言,学会打代码,但是打出第一个代码还是经历了很大困难,首先我对于打代码真的一窍不通,其次我连打代码的软件也不会装,但在班导的帮助下我还是装好了软件,在打第一个代码 ...

  4. 【★】RSA-什么是不对称加密算法?

    不对称加密算法RSA浅析 本文主要介绍不对称加密算法中最精炼的RSA算法.我们先说结论,也就是RSA算法怎么算,然后再讲为什么. 随便选取两个不同的大素数p和q,N=p*q,r=(p-1)*(q-1) ...

  5. 【Beta】Daily Scrum Meeting——Day4

    站立式会议照片 1.本次会议为第四次Meeting会议: 2.本次会议在早上9:35,在陆大2楼机房召开,本次会议为25分钟讨论今天要完成的任务以及接下来的任务安排. 燃尽图 每个人的工作分配 成 员 ...

  6. 团队作业4---第一次项目冲刺(ALpha版本)第一天

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.界面 完成登录界面 2.功能 完成数据结构设计及数据交互模块代码 完成爬虫博客页面数据采集模块 四.困难与问题 1.因为要 ...

  7. 201521123011 《Java程序设计》第1周学习总结

    1. 本章学习总结 通过这章的学习让我初步认识了Java,认识到了java和之前c语言的异同点. 对java是面向对象的这句话有了一定了解 认识了jdk,jre,jvm的区别. 2.书面作业 1.为什 ...

  8. 解决"应用程序无法启动,因为应用程序的并行配置不正确"问题

    想必不少人都会遇到题目中的问题.我在一次和舍友一起重装系统的时候变遇到了上述的问题, 经过仔细分析发现电脑会出现上述问题所必要的条件 系统中没有存在合理的运行库文件 所运行的软件是之前重装系统之间留下 ...

  9. java课设-计算数学表达式的程序,201521123050,51 团队

    1.团队名称.团队成员介绍 团队名称:天空 团队成员: 肖世松 谢庆圆 2.项目git地址 项目git地址 3.项目git提交记录截图(要体现出每个人的提交记录.提交说明) 4.项目功能架构图与主要功 ...

  10. 微信小程序中发送模版消息注意事项

    在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...