手工体验smtp和pop3协议 邮件实现详解(二)

 更新时间:2017年10月16日 09:51:49   作者:YSOcean  
POP3/IMAP协议定义了邮件客户端软件和POP3邮件服务器的通信规则,这篇文章我们就来手工体验SMTP和POP3协议的奥秘,感兴趣的小伙伴们可以参考一下

  上篇博客我们简单介绍了电子邮件的发送和接收过程,对参与其中的邮件服务器,邮件客户端软件,邮件传输协议也有简单的介绍。我们知道电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递必须遵守的规则便是邮件传输协议。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收发邮件是很重要的,下篇博客会讲如何通过代码来实现收发邮件,以及后面内嵌图片,网站等花式写邮件的讲解。如果我们这篇博客理解透彻了,后面的内容理解起来就会事半功倍了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • spring scheduled单线程和多线程使用过程中的大坑

    spring scheduled单线程和多线程使用过程中的大坑

    本文主要介绍了spring scheduled单线程和多线程使用过程中的大坑,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证

    SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证

    Spring Security是一个可以为Java应用程序提供全面安全服务的框架,同时它也可以轻松扩展以满足自定义需求,本文主要介绍了SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证,感兴趣的可以了解一下
    2023-11-11
  • 详解JavaEE中Apollo安装使用小结

    详解JavaEE中Apollo安装使用小结

    这篇文章主要介绍了详解JavaEE中Apollo安装与使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Flutter瀑布流仿写原生的复用机制详解

    Flutter瀑布流仿写原生的复用机制详解

    这篇文章主要给大家介绍了关于Flutter瀑布流仿写原生的复用机制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用flutter具有一定的参考学习价值,需要的朋友可以参考下
    2021-07-07
  • 全面理解java中的异常处理机制

    全面理解java中的异常处理机制

    下面小编就为大家带来一篇全面理解java中的异常处理机制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Spring Bean常用的的装配方式详解

    Spring Bean常用的的装配方式详解

    这篇文章主要介绍了Spring Bean常用的的装配方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • IDEA实现 springmvc的简单注册登录功能的示例代码

    IDEA实现 springmvc的简单注册登录功能的示例代码

    这篇文章主要介绍了IDEA实现 springmvc的简单注册登录功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • springboot @Async 注解如何实现方法异步

    springboot @Async 注解如何实现方法异步

    这篇文章主要介绍了springboot @Async 注解如何实现方法异步,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot项目整合MybatisPlus并使用SQLite作为数据库的过程

    SpringBoot项目整合MybatisPlus并使用SQLite作为数据库的过程

    SQLite是一个紧凑的库,启用所有功能后,库大小可以小于 750KiB, 具体取决于目标平台和编译器优化设置, 内存使用量和速度之间需要权衡,这篇文章主要介绍了SpringBoot项目整合MybatisPlus并使用SQLite作为数据库,需要的朋友可以参考下
    2024-07-07
  • 解决Spring使用@MapperScan问题

    解决Spring使用@MapperScan问题

    这篇文章主要介绍了解决Spring使用@MapperScan问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论