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

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

(0)

相关推荐

  • 深入Lumisoft.NET组件POP3邮件接收与删除操作的使用详解

    Lumisoft.NET组件是一个非常强大的邮件发送.邮件接收等功能的开源组件,一般用它来处理邮件的相关操作,是非常合适的.之前也写过一些该组件的随笔文章,不过主要是利用来发送邮件居多,最近由于项目需要,需要利用该组件来接收邮件,邮件通过POP3协议进行接收到本地,故对该组件进行了全面的了解和使用.本文主要是在此背景上,介绍该组件的POP3协议处理类的使用.Lumisoft.NET组件2013年作者有做了一定的更新,修复了一些问题,本文是基于该组件的最新版本进行开发使用. 1.POP3登录及头部

  • java使用Socket实现SMTP协议发送邮件

    本文实例为大家分享了java 利用Socket实现SMTP协议发送邮件的具体代码,供大家参考,具体内容如下 package mail; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; impo

  • Java+Nginx实现POP、IMAP、SMTP邮箱代理服务

    这篇文章介绍了Java+Nginx实现POP.IMAP.SMTP邮箱代理服务,我们本次使用的环境为Centos7下,java程序我们通过eclipse导出的war包运行在linux下的tomcat下执行的,具体见下: 环境介绍: Hostname:java.iternalsoft.com IP:192.168.2.163 Roles: Proxy Server OS:Centos7 我们通过以下命令来修改新安装的服务器信息: Hostnamectl set-hostname customname

  • 如何用POP3接收电子邮件?

    <%  Set pop3 = Server.CreateObject( "JMail.POP3" ) pop3.Connect "username", "password", "pop3mail.intels.net"  ' POP3的连接用户名,密码,POP3地址. Response.Write( "你现在有" & pop3.count & " 封邮件.<br>

  • 提示Outlook/Foxmail收取163邮件失败:ERR 您没有权限使用pop3功能

    用outlook和foxmail总无法接收163邮件,汉,原来是他们不给我使用pop3功能了新申请的163,126邮箱用Jmail发送邮件老是不成功,用Outlook/Foxmail收取邮件也是失败,提示:ERR 您没有权限使用pop3功能.最终在http://help.163.com/找了原因: 复制代码 代码如下: "06年11月份后"新"申请的163免费邮箱暂时无法使用POP和SMTP功能,需要开通邮箱伴侣或参加一些不定期举办的活动后才可以使用客户端功能."

  • java实现基于SMTP发送邮件的方法

    本文实例讲述了java实现基于SMTP发送邮件的方法.分享给大家供大家参考.具体实现方法如下: import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Tra

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

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

  • 邮件的组织结构介绍 邮件实现详解(三)

    要想各种邮件处理程序能识别我们所写的电子邮件,能从我们所书写的电子邮件中分析和提取出发件人,收件人,邮件主题和邮件内容以及附件等信息,那么我们所写的电子邮件必须要遵循一定的格式要求,正如我们上一篇博客 手工体验smtp和pop3协议 ,我们在发送邮件时有固定的写法.而这种邮件内容的基本格式和具体细节分别是由 RFC822 文档和 MIME 协议定义的. 1.RFC822 邮件格式 英文参考文档如下:https://tools.ietf.org/html/rfc822 RFC822 文档中定义的文

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

    好了,进入这个系列教程最主要的步骤了,前面邮件的理论知识我们都了解了,那么这篇博客我们将用代码完成邮件的发送.这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进行任务提醒等等.我们这里所讲的就是利用 JavaMail 完成邮件的发送和接收功能. PS:本篇博客源码下载链接:https://github.com/YSOcean/cnblogs 1.JavaMail 介绍 JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现

  • 对python 自定义协议的方法详解

    前面说到最近在写python的一些东西,然后和另外一位小伙伴定义了协议,然后昨天我有一部分东西没理解对,昨天上午我自己重写了一遍接收和发送的全部逻辑,昨天下午补了压力测试的脚本,自测没问题之后告知联调的小伙伴. 结果上午还是出了一点问题,然后我们两对代码,他写了一个python的实现.还好最后我这边没问题.(我也害怕是我这边出问题啊,所以我自己的代码都自己检查了好几遍) 简单放一下他的实现: import struct import ctypes class E(Exception): def

  • 计算机网络编程MQTT协议基础原理详解

    目录 什么是 MQTT 协议 MQTT 基础 发布 - 订阅模式 可拓展性 消息过滤 基于主题的过滤 基于内容的过滤 基于类型的过滤 MQTT 与消息队列的区别 MQTT 重要概念 MQTT client MQTT broker MQTT Connection 消息报文 CONNECT CONNACK 消息类型 发布 订阅 确认消息 退订 确认退订 聊聊 Topic 通配符 单级通配符 多级通配符 之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦. 那

  • Jenkins安装以及邮件配置详解

    Jenkins是一个java开发的.开源的.非常好用持续集成的工具,它能帮我们实现自动化部署环境.测试.打包等等的工作,还可以在构建任务成功或者失败之后给我们发邮件通知. 什么叫持续集成呢,就是能重复.持久的去运行一个任务. Jenkins下载.安装 Jenkins的下载地址是https://jenkins.io/download/,下载的时候可以选择各个版本的以及对应操作系统的版本,一般你下载的时候下载通用的.war文件即可,这个不管在哪个操作系统上都可以运行,但是前提是你要装jdk,因为Je

  • struts2集成javamail发邮件示例详解

    一.代码预览这两天在做struts2上的邮件发送.以前的项目有用到spring,用spring提供的邮件支持类很方便可以完成这个功能,但是现在只用struts2的话,就碰到了一系列的问题. 请先将自己下载的 mail.jar,及activation.jar加入到classpath 复制代码 代码如下: package com.nerve.cloudoffice.common.util; import java.util.List;import java.util.Properties; impo

  • python实发邮件实例详解

    yagmail 实现发邮件 yagmail 可以更简单的来实现自动发邮件功能. 1.安装 pip install yagmail 2.简单举例 import yagmail #链接邮箱服务器 yag = yagmail.SMTP( user="user@126.com", password="1234", host='smtp.126.com') # 邮箱正文 contents = ['This is the body, and here is just text

  • java实现邮件发送详解

    java实现邮件发送逻辑并不复杂(不包含附件),只是根据官方调用官方提供的sdk,首先需要引入maven依赖: javax.mail <dependency > <groupId >com.sun.mail</groupId > <artifactId >javax.mail</artifactId > <version >1.6.0</version > </dependency > 然后构造发送邮件所需的实

  • Jenkins发送测试报告邮件过程详解

    1.安装插件 Email Extension Plugin 2.设置Extended E-mail Notification a."系统管理"--"系统设置".配置Extended E-mail Notification--"高级" 备注: QQ邮箱开启IMAP/SMTP服务:设置--账户 QQ邮箱服务器端口号 b.系统管理员地址要设置成和发送邮件的地址一致,不然发送邮件会失败 3.设置邮件通知 "系统管理"--"系

随机推荐