跳到主要内容

如何用传统的方式发邮件

参考资料: https://www.bilibili.com/video/BV1c4411d7jb?p=72&vd_source=e66dd25b0246f28e772d75f11c80f03c 湖科大的高军老师做的计算机网络课,去年选修的计网全靠高老师,生动,举例丰富,配套实验课,无废话纯干货,单推一波!

电子邮件介绍

电子邮件(E-mail)是一种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费)、非常快速的方式(几秒钟之内可以发送到世界上任何指定的目的地),与世界上任何一个角落的网络用户联系。 电子邮件可以是文字、图像、声音等多种形式。同时,用户可以得到大量免费的新闻、专题邮件,并轻松实现轻松的信息搜索。电子邮件的存在极大地方便了人与人之间的沟通与交流,促进了社会的发展。

电子邮件系统

电子邮件系统采用客户/服务器方式。

电子邮件系统的三个主要组成构件:用户代理、邮件服务器和电子邮件所需的协议。

用户代理(LDA):用户与电子邮件系统的接口,又称为电子邮件客户端软件。 现在的很多邮件客户端都可以设置邮件代理这一选项,比如hotmail、网易邮箱大师等。

邮件服务器:电子邮件系统的基础设施。Internet上所有的ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。

如图所示,是电子邮件的发送流程:

电子邮件发送流程

  1. 发送方通过用户代理,使用SMTP发送邮件,这一过程遵循TCP协议;
  2. 邮件先到达发送方的邮件服务器,服务器中登陆SMTP客户,使用SMTP发送邮件。这一过程同样使用的是TCP协议;
  3. 接收方通过SMTP服务器接收邮件,随后转送至POP3服务器,使用POP3读取邮件。接收方(同样也是POP3客户)通过用户代理最终接收邮件。

简单邮件传送协议(SMTP)的工作原理

发送方和接收方都使用TCP协议进行连接,这一点在刚刚已经阐明了。注意端口号为25。

发送方邮件服务器就像一个邮筒。用户把待发送的邮件放进这个“邮筒”里,服务器周期性地扫描邮件缓存,如果发现有待转发的邮件,那么服务器便会“捡起”这一封邮件,通过TCP发送给接收方的服务器。

整个工作流程概述起来比较简单。我们来看具体的TCP握手流程:

发送方和接收方使用命令和应答的模式握手。其中,命令有14条,应答信息有21种。

  1. 首先,接收方会主动推送一条应答220,告知其他服务器自己服务就绪。

  2. 客户端向服务器说明身份,告知自己SMTP服务器的域名。

HELO url
// 这里的URL即发送方SMTP邮件服务器的域名。
  1. 之后若身份有效,应答250。否则发回其他代码,如421,表示服务不可用。
  2. 客户端告诉服务器邮件来自何方:
MAIL FROM:url
//这里的URL即用户自己的邮箱域名。
  1. 接收方服务器若认为合理,则发回250,否则发回其他错误代码。
  2. 客户端告诉服务器邮件需要去往何地:
RCPT TO:url
//这里的url即收件人的地址。
  1. 若该邮箱存在,发回应答代码250,否则发回其他错误代码。
  2. 客户端告诉服务器自己准备发送邮件内容:DATA
  3. 若准备好接收,发回应答代码354,否则发回其他错误代码。
  4. 客户端向服务器发送邮件内容:邮件内容,并发送结束符.
  5. 若收件成功,发回应答代码250,否则发回其他错误代码。

需要注意的是,真实的情况会比这复杂一丢丢,因为我们省略了认证过程和应答代码后面的简单描述信息。并且不同的SMTP服务器给出的相同应答代码的描述信息可能不同。

电子邮件的信息格式

电子邮件的信息格式是在RFC 822中单独定义的。2008年,该RFC文档更新为RFC 5322。

一个电子邮件有信封和内容两个部分,内容又由首部和主体构成。

首部中,我们写有From、To、Cc(抄送)和Subject(主题)这四个关键字。邮件系统将自动提取所需信息,并将其写在信封上,主体才是用户想要发送的内容。

SMTP协议的特点

SMTP协议有如下特点:

  1. SMTP协议只能传送ASCII码文本数据,不能传送可执行文件或者其他的二进制对象。
  2. SMTP协议不能满足传送多媒体邮件(例如带有图片、音频或视频数据)的需要。并且,其他非英语国家的文字(中文、俄文、西语等等)也无法用SMTP传送。

为了解决无法传送这些文本的问题,1992年,提出了多用途因特网邮件扩展MIME(Multipurpose Internet Mail Extensions)。MIME部署在发送方将邮件放到SMTP服务器的过程中,它可以转换非ASCII码为ASCII码。它增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息。;又定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化;并且定义了传送编码,可对任何内容格式进行转换,不被邮件系统改变。作为一种扩展,MIME同样应用于HTTP协议中。

常用的邮件读取协议

POP3和IMAP4都采用基于TCP连接的客户/服务器方式。POP3使用端口110,IMAP4使用端口143。

邮局协议POP

全称Post Office Protocol,POP3是其第三个版本,是因特网正式标准,非常简单、功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件。

因特网邮件访问协议IMAP

全称Internet Mail Access Protocol,IMAP4是其第四个版本,目前还只是因特网建议标准。

基于万维网WWW的电子邮件

通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读电子邮件。用户无需安装专门的用户代理程序,只需使用通用万维网浏览器即可。同时也不需要将邮件下载到本地进行管理,这一过程可在邮件服务器网站上实现。

使用Telnet客户端发送邮件(Windows)

Telnet是什么? Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

以Win11为例,启用Telnet客户端需以下步骤:

首先搜索控制面板,找到“程序”——“程序与功能”——“启用或关闭Windows功能”:

在这里插入图片描述 下拉找到“Telnet客户端”,点击勾选:

在这里插入图片描述 然后打开cmd输入telnet,即进入命令行:

在这里插入图片描述 但是我们发邮件就不用这样做了。我们回到cmd,以qq邮箱为例,输入

telnet smtp.qq.com 25

见到220应答则判定已经连接成功。

输入helo命令挥手,helo后面的信息可随意写(ASCII码范围内),但不能不写,否则会报错:

在这里插入图片描述 这里看到250也是表示接收成功了。

输入auth login,表示登陆,返回334接收成功:

在这里插入图片描述 后方这一串代码可用base64解码工具解码,得出username,也就是用户名,那么我们输入自己的邮箱。注意需要再转码(就不展示邮箱地址了),否则服务器看不懂:在这里插入图片描述

在这里插入图片描述 输入自己的邮箱密码,同样也需要转码:

注意这里容易出现535 fail login报错,为什么呢?你可能把你的qq密码当做smtp密码了,但其实不是的。qq邮箱的smtp服务需要手动开启,可通过设置找到“启用IMAP/SMTP服务”,根据提示操作后拿到一次性密码。

在这里插入图片描述

235即登陆成功:

在这里插入图片描述 输入发信人邮箱:

mail from:<xxxx@qq.com>

输入收件人邮箱:

rcpt to:<xxxx@xx.com>
//可以填多个

成功应答250。

在这里插入图片描述

输入 data,输入:

From:<发送者的email>
To:<接受者的email>
Subject:<发送主题》
空一行
<发送内容>
. (输入点代表编辑结束)

250 ok即可发送邮件。

但不建议这么发邮件,为什么呢?首先取得一次smtp密码就需要发送一次短信,但是这样很贵,发一次0.1元,非常不划算,而且超时即丢包。我们一般发邮件使用网页客户端就可以了,大道化简,这也体现了万维网电子邮件管理的伟大之处,大大减少了不必要的时间,提升了交流的效率。