上篇博客我们简单介绍了电子邮件的发送和接收过程,对参与其中的邮件服务器,邮件客户端软件,邮件传输协议也有简单的介绍。我们知道电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递必须遵守的规则便是邮件传输协议。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协议。

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:

rcpt to:

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

第一步:输入data

第二步:输入邮件内容

from:    ----邮件头发件人地址

to:       ----邮件头收件人地址

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

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

java smtp pop3_手工体验smtp和pop3协议 邮件实现详解(二)相关推荐

  1. java获取request body_HttpServletRequest获取body内容(字符串/二进制)详解

    首页 > Java Web > SpringMvc应用 > HttpServletRequest HttpServletRequest获取body内容(字符串/二进制)详解 获取HT ...

  2. java中String s=abc及String s=new String(abc)详解

    java中String s="abc"及String s=new String("abc")详解 1.   栈(stack)与堆(heap)都是Java用来在R ...

  3. java一个方法排他调用_Java编程实现排他锁代码详解

    一 .前言 某年某月某天,同事说需要一个文件排他锁功能,需求如下: (1)写操作是排他属性 (2)适用于同一进程的多线程/也适用于多进程的排他操作 (3)容错性:获得锁的进程若Crash,不影响到后续 ...

  4. 蓝桥杯java B组历年省赛真题汇总及题目详解

    蓝桥杯java B组历年省赛真题汇总及题目详解 2019年第十届蓝桥杯省赛真题详解 2018年第九届蓝桥杯省赛真题详解 2017年第八届蓝桥杯省赛真题详解 2016年第七届蓝桥杯省赛真题详解 2015 ...

  5. 【JAVA秘籍心法篇-Spring】Spring XML解析源码详解

    [JAVA秘籍心法篇-Spring]Spring XML解析源码详解 所谓天下武功,无坚不摧,唯快不破.但有又太极拳法以快制慢,以柔克刚.武功外式有拳打脚踢,刀剑棍棒,又有内功易筋经九阳神功.所有外功 ...

  6. 张孝祥java邮件开发_张孝祥java邮件开发详解笔记(生成文本邮件)

    package zxx.createMessage; import java.io.FileOutputStream; import java.util.Date; import java.util. ...

  7. java中北大学ppt总结+课后习题第二章(小宇特详解)

    java中北大学ppt总结+课后习题第二章(小宇特详解) 基本数据类型 Java语言有8种基本数据类型. 逻辑类型:boolean.1字节 整数类型: 1字节整数类型:byte. 2字节整数类型:sh ...

  8. 2022年Java面试总结,200多页真题笔记和详解(核心考点、6家大厂)

    为了进大厂,花了很多时间和精力在面试准备上,也刷了很多题.但题刷多了有点怀疑人生,不知道刷的这些题在之后的工作中能不能用到,如果只是为面试而刷题是不是在浪费人生呢? 如果你想进大厂,或者去一个更大.更 ...

  9. SMTP协议及POP3协议-邮件发送和接收原理(转)

    本文转自https://blog.csdn.net/qq_15646957/article/details/52544099 感谢作者 一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 ...

最新文章

  1. Openoffice 安装与配置
  2. 深入理解PHP内核(四)概览-PHP脚本的执行
  3. 单片机外文参考文献期刊_论文参考文献|如何在最短时间内加注参考文献??...
  4. Mysql基础运维及复制架构——PRIT非完整恢复
  5. Spring @Import 注解使用详解
  6. 新鲜抓取古文赏析五千篇
  7. 解决myeclipse报错500,MySQLyog报错误码问题
  8. java多线程基础概念
  9. u盘无媒体容量0无卷还能修吗_都2020年了,买新U盘没Type-C接口就过时了
  10. 关于win32程序如何共享数据
  11. java clob内存溢出_java - 从JSON创建CLOB属性 - 堆栈内存溢出
  12. AllWinner--R329
  13. layui怎么设置select默认选中,修改回显
  14. ui设计网站资料大全,你想要的都有
  15. 面食有哪些 面食的种类大全
  16. 安卓怎么实现计算纪念日
  17. 复试项目2 直流可变稳压电源
  18. 数据库表设计字段说明
  19. 继金山WPS之后,珠海再出神级电子表格,雷军嫡系出品
  20. pycharm编辑器:cannot import name ‘自定义函数’ 的一种解决方法

热门文章

  1. 5G连接器存在怎样的魔力?
  2. css变形处理绘制照片墙
  3. FaceBook密钥散列
  4. 假设检验 | 非参数假设检验 —— KS检验
  5. Error response from daemon: manifest for nvidia/cuda:latest not found: manifest unknown: manifest
  6. android popupmenu 自定义样式,如何更改Android PopupMenu宽度
  7. C++ decltype的使用
  8. 类型推导decltype
  9. 立即执行函数-有关js里function前面加!
  10. Eclipse 进行Linux远程开发