计算机网络学习笔记(二)手动发送/接收/删除邮件


协议介绍 :


电子邮件是一个非常有用和"古老"的应用 , 目前情况下 , 它遵循了三种协议 :

  • SMTP协议
    • 主要应用于发送邮件 , 全称为 : Simple Mail Transfer Protocol
  • POP3协议
    • 主要应用于接收邮件 , 全称为 : Post Office Protocol - Version 3
  • IMAP协议
    • 一种比SMTP和POP协议都要新的协议 , 支持更多的功能和操作(对邮件的搜索等) , 主要应用于邮件的接收

实战一 : (利用Telnet/nc手动发送邮件)


  1. Windows环境下 : (可以使用Telnet命令)
  • 首先我们需要打开Windows的Telnet功能 , 需要在控制面板-程序-启用或关闭Windows功能-Telnet客户端
  • 然后我们就可以使用Telnet命令 , 我们需要使用Telnet连接到我们的邮件服务器上 , 然后通过SMTP支持的命令进行邮件的发送
  • 这里我们使用163邮箱的smtp服务器 , 服务器的地址 : smtp.163.com , 端口25
  • 我们在命令行中输入 : telnet smtp.163.com 25
  • 成功连接到163的SMTP服务器
  • 这里需要了解的是SMTP协议是 Command/Response 模式的 , 这个和HTTP协议有一点不同 , HTTP 协议基于 Request/Response
  • 这个时候我们需要输入命令(Command)
  • 向服务器发送握手数据
  • HELO 163.com
  • 向服务器请求登陆
  • AUTH LOGIN
  • 输入Base64编码以后的用户名
  • Base64(YourUsername) 注意这里的用户名不包含 @163.com
  • 输入Base64编码以后的"密码"
  • Base64(YourPassword) 注意这里的密码并不是163邮箱的登陆密码 , 而是需要你登陆网页版的163邮箱打开SMTP服务的时候配置的密码
  • 如果这个时候服务器返回成功 , 则说明我们已经成功登陆
  • 然后我们就可以输入发送邮件的命令了
  • 首先需要设置发送方
  • MAIL FROM: <Your Email Address> 例如 : 你的邮箱是 sunshine@163.com , 那么这里你要输入的就是 MAIL FROM: <sunshine@163.com>
  • 设置接收方
  • RCPT TO: <Receiver's Email Address>
  • 然后输入邮件 , 这里说的 邮件 包含两个部分 , 邮件头和邮件主 , 邮件头中可以定义 : Subject , From , To 这些属性 , 分别对应的就是 : 主题 发件人 收件人 , 邮件头结束以后需要添加一个空行 , 用于分割邮件头和邮件正文(主体) , 注意这里邮件的主体在结束的时候需要在一个空行中键入一个英文的句号. , 用来表示邮件已经结束 , 最后键入回车换行即可提交给邮件服务器 , 加入邮件服务器的待发送队列中 , 一般很快就会收到邮件
    Subject:Hello world!
    From:Your Email Address
    To:Receiver's Email Address
    
    Across the Great Wall we can reach every corner in the world.
    .
    
    
  • 然后屏幕就会显示发送状态 , 如果发送成功会有ok的字样 , 如果发送失败 , 也会有错误码 , 我们可以根据这个错误码去查询失败的原因然后修正
  • 整个流程截图如下 :


    1478179741976.png
  • 注意 : 下图中的邮件头和邮件主体(正文)之间少了一个空行 , 这样的话会导致邮件的正文不能正常发送 , 发送后显示正文为空 , 笔者之后才发现 , 之前一直纳闷这个问题 , 希望这张图不要给大家误导(已修复)


    Paste_Image.png
  • 这个时候我们就可以查看我们的邮箱 , 这里我使用了自己的163邮箱 , 将发件人和收件人都填写成了同一个 , 我们登陆看看有没有成功收到邮件 :


    1478189771068.png

    1478190164056.png
  1. Linux环境下 : (可以使用Telnet/nc命令)
  • Linux环境下 , 使用nc命令也是和Telnet非常类似 : nc smtp.163.com 25 , 然后成功登陆163的SMTP服务器之后的操作就和Windows完全没有区别了 , Telnet也是和Windows没有任何区别 , 这里不再赘述

实战二 : (利用Telnet/nc手动接收并操作邮件 , 例如获取所有邮件/删除某个邮件等)


这次我们还是利用刚才的那个邮箱 , 我们首先登陆网页客户端来看一下邮箱里面的邮件列表


1478194719603.png

我们可以看到收件箱里面总共有三封邮件
我们现在开始使用命令来连接邮件服务器 , 并获取收件箱列表 , 同样 , 由于Windows和Linux系统在这里的操作并没有什么区别 , 这里就直接使用Windows下的Telnet客户端进行演示 :

  • 首先使用Telnet连接到邮件服务器(POP3)
  • Telnet pop3.163.com 110 POP3使用的默认端口是110
  • 连接成功后 , 进入交互界面 , 由于这里我们需要获取用户的收件箱列表 , 因此肯定需要一个认证的过程
  • User:YourUsername 用户名是明文 , 不需要Base64编码, 注意不要添加多余的空格
  • Pass:yourPassword 密码是明文 , 不需要Base64编码, 注意不要添加多余的空格
  • 如果认证成功的话 , 会有相应的提示 , 并且会显示收件箱的邮件个数 , 还有所有邮件的内容长度总和
  • 现在我们可以对邮件的列表进行获取
  • List
  • 这样就会显示收件箱中的所有邮件的编号和内容长度
  • 可以使用Retr 邮件编号来获取邮件的内容 , 包括邮件头 , 邮件正文
  • 可以使用Dele 邮件编号来删除某个制定的邮件 , 注意 : 这里的删除指的是 : 从服务器删除
  • 可以使用Quit退出并断开与服务器的连接
  • 截图 :


    1478195826699.png

    1478196015622.png

    1478196054883.png

    Paste_Image.png

关于POP3和SMTP协议的命令还有很多 , 这里只介绍了最简单常用的几个 , 大家有兴趣可以参考Wiki上的介绍 , 很详细 , 也可以去参考RFC的官方文档

SMTP状态码 :

Code 英文描述 中文描述
211 System status, or system help reply 系统状态或显示系统帮助。
214 Help message 显示系统帮助,通常用于显示非标准命令的帮助。
220 Service ready 服务就绪。
221 Service closing transmission channel 服务关闭了传输通道。
250 Requested mail action okay, completed 所要求的邮件动作完成,可以继续邮件对话。通常在EHLO/HELO命令后会通过“250-”来描述服务器所支持的特性。
251 User not local; will forward to 收件人非本地用户,将转发到 。
354 Start mail input; end with . 开始接收邮件内容输入,以.(即单行一个点)结束输入。
421 Service not available, closing transmission channel 无法提供正常服务,关闭传输管道。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在服务器遇到问题,必须关闭传输。
450 Requested mail action not taken: mailbox unavailable 所要求的邮件动作无法执行:邮箱不可用。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在邮箱忙或被拒绝等。
451 Requested action aborted: local error in processing 要求动作中断:本地端发生错误。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在系统投递时遇到意外的错误。
452 Requested action not taken: insufficient system storage 要求动作无法执行:系统空间不足。邮件保留在本地,可能会尝试重新投递。通常这种情况发生在邮箱限额满。
500 Syntax error, command unrecognized 命令格式错误,不可识别。当命令行太长时也会发生这样的错误。
501 Syntax error in parameters or arguments 命令参数错误。
502 Command not implemented 命令尚未实现。
503 Bad sequence of commands 错误的命令顺序。
504 Command parameter not implemented 命令的参数尚未实现。
550 Requested action not taken: mailbox unavailable 所要求动作无法执行:信箱不存在。不再尝试投递。
551 User not local; please try 收件人不属于本地用户,转发到。不再尝试投递。
552 Requested mail action aborted: exceeded storage allocation 所要求的动作中断:超出所分配的储存空间。不再尝试投递。
553 Requested action not taken: mailbox name not allowed 所要求的动作未执行:不接受该信箱。通常发生在邮件地址错误、被作为垃圾邮件拒收。不再尝试投递。
554 Transaction failed 传输失败。

参考资料 :


  1. SMTP协议
  2. POP协议
  3. IMAP协议
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容