企业资料通讯Week5 (2) | electronic mail [SMTP部分]

electronic mail 三要件

1. user agents(UA)

邮件使用者代理人,也叫"mail reader",透过 UA 来帮我们送信到mail servers(邮件服务器)。UA 主要的功能就是收受邮件主机的电子邮件,以及提供使用者浏览编写邮件的功能!

2.mail servers /**这里写得很浅,想知道更多可以看 22.1.3 邮件传输所需要的元件 (MTA, MUA, MDA) 以及相关协定 */

我们通常接收到的 email 都是使用『帐号@主机名称』的方式来处理的, 所以说,你的邮件服务器『就一定要有一个合法注册过的主机名称』。
内有mail box(旧式信箱,某个帐号专用的信件收受档案)与寄信的queue。

3.SMTP(simple mail transfer protocol)

The SMTP protocol is a text-based protocol that is composed of commands (EX: EHLO, MAIL FROM, RCPT TO, DATA, and QUIT.)and replies.

  • 使用TCP ,Port 25[课本上说使用RFC 2821]
    (网路上查是RFC 5321)
  • 有送信的动作EX:UA送到mail server,mail server与mail server的信件交换也是SMTP
  • 讯息使用7-bit ASCII
    /*RFC是用来记录网际网路规范、协定、过程等的标准档案/
    /*SMTP与HTTP不同之处是SMTP不用收信的UA一直在线上,跟送信很像,我不用一直在家,丢在mail box/
    /*SMPT只跟送信有关,与收信无关/
    Q:为甚麽与收信无关?

三阶段:
1)handshaking(greeting)交握
2)transfer of messages
3)closure

情境例子SMTP

Alice 要寄一封信给Bob
https://ithelp.ithome.com.tw/upload/images/20211027/20135414DYnMeT2FZ7.png
/*发信出去的是client,注意角色会依行为改变/
如图:
https://ithelp.ithome.com.tw/upload/images/20211026/20135414ilJoiI5xUC.png

1)Alice 用UA写一封信
2)Alice 的UA 送信到 Alice的mail server(此动作UA是client,要寄的信会在mail server的 message queue排队)
3)、4)现在Alice 的SMTP server 透过 TCP 送信到 Bob 的 mail server(Alice 的 Mail server 此时是client角色)

5)Bob 的mail server 把讯息传到 Bob 的信箱(之後Bob 有没有用UA 收信就与SMTP无关了)
6)Bob 开UA 拿信(不是SMTP,另一个protocol)
因为Bob的Email server不知道Bob 的IP 与 Port,就等Bob 过来拿,因为Bob 的UA 知道 [email protected] 的Port 与 IP。

SMTP 的互动

SMTP定义了Server与Client的互动顺序。
下面是两个mail server之间使用SMTP的范例,里面都是纯text。
https://ithelp.ithome.com.tw/upload/images/20211027/2013541427jdclzBNx.png

  • 第一行: 建立TCP连线後,接着S(server,Bob 的 mail server)先打招呼:
    220 hamburger.edu /*一切正常,我是hamburger.edu/

  • 第二行: C(client, Alice 的mail server)也打招呼:
    HELO crepes.fr /*你好,我是crepes.fr/

  • 第三行: S 说250 是你好的意思

  • 第四行: C 说这里有一封信来自 [email protected]

  • 第五行: S 接受

  • 第六行: C 表示要传给 S 下面的帐号 bob@ hamburger.edu

  • 第七行: S 接受

  • 第八行: C:DATA /*我要开始送罗/

  • 第九行: S:354/*没问题/ 并要求信件结束时用单独占的一行的 "."表示

  • 第十到十二行的三个C: 都是信件内容,用ASCII

  • 第十三行:S表示收到
    接下来就是221结束

然後TCP插槽清空释放资源
/**特色是交互性的,而为甚麽这样设定呢?
因为在交谈的过程中可以做很多动作EX:删信
*/

SMTP 特性

https://ithelp.ithome.com.tw/upload/images/20211027/20135414Om1Cpct5nF.png

  • 使用persistent connections 因为要一直来往,不能断

  • commands:ASCII text

  • response:status code and phrase EX:220
    /*讯息一定要是7-bit ASCII,不能中文不能图片,想当然後来有人模改/

  • 与HTTP相比,HTTP回应的物件都会包好在回应讯息中,但 SMTP 会有multipart message

信件内容

刚刚说模改,它是改信件「内容」的format部分(在RFC 822 改,与SMTP 的 RFC 2821不一样的protocol) SMTP主要负责client server的交换来往。
https://ithelp.ithome.com.tw/upload/images/20211027/20135414ONqERcc2gl.png
这信件内容分两部分,header 与 body

header:

1)To EX:bob@...
2)From EX:alice@...
3)Subject 标题
4)还有很多...
RFC 822的 From, To(只是表示谁寄给谁) 与 RFC 2821 的From, To (用来交换讯息的,寄完就丢掉,只留message放在mail box)不一样
UA会把信件内容的资料结构造出来,然後像信一样把内容塞到信件中,mail server 不会看到里面内容,它会直接放到mail box

body:

是ASCII text
可以用一些function(EX:quoted, base64) 转换其他格式为ASCII

我们可以开自己的原始邮件来看

multipart

现在的信大部分是HTML格式,下图是其中一个part,有注明content-Type, Content-Transfer-Encoding
https://ithelp.ithome.com.tw/upload/images/20211027/20135414EyJj0tSyHw.png

如果是附加档案,如图:
https://ithelp.ithome.com.tw/upload/images/20211027/20135414sxJNYmSKBq.png

补充:

MIME协定用於定义复杂的邮件体格式,为了解决SMTP只能用文本格式。它可以表达多段平行的文字内容和非文本的邮件内容,例如,在邮件体中内嵌的图像数据和邮件附件等

参见:
SMTP WIKI
鸟哥的 Linux 私房菜|第二十二章、邮件服务器: Postfix
RFC WIKI
smtp 协定 MIME 协定
理解邮件传输协定(SMTP、POP3、IMAP、MIME)


<<:  用 Python 畅玩 Line bot - 23:Flask(一)

>>:  课堂笔记 - 深度学习 Deep Learning (13)

Day20:今天来聊一下Microsoft 365 DLP的识别/监视及自动保护敏感资讯

Microsoft 365 DLP(资料外泄防护)警示将协助我们进行调查找出完整的事件范围。 DLP...

SPML用於将跨资讯系统之创建和管理实体和属性的过程自动化

在一个电信行业的技术词汇,它是指为了向用户提供(新)服务的准备和安装一个网络的处理过程。它也包括改变...

iOS APP 开发 OC 第十八天,Wild Pointer 如何火化殭屍?如何将殭屍复活?

tags: OC 30 day Wild Pointer 是什麽? 野指针就是指针指向的位置是不可知...

Day 6 ELK Stack on k8s 介绍

2021 铁人赛 DAY6 在上篇我们利用Prometheus捞取丛集内资源使用率的metric,再...

【JavaScript】样板字面值

【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...