邮件的发送和接收过程——STMP、POP、IMAP、MIME

       电子邮件发送协议 是一种基于“ ”的协议,主要包括 SMTP邮件接收协议 则是一种基于“ ”的协议,主要包括 POP协议IMAP协议 ,在正式介绍这些协议之前,我们先给出邮件收发的体系结构:



        从上图可以看出邮件收发的整个过程大致如下:

       (1)发件人调用用户代理编辑要发送的邮件。

       (2)发件人点击屏幕上的”发送邮件“按钮,把发送邮件的 工作全部交给用户代理来完成。用户代理通过SMTP协议将邮件发送给发送方的邮件服务器(在这个过程中,用户代理充当SMTP客户,而发送方的邮件服务器则充当SMTP服务器 )。

       (3)发送方的邮件服务器收到用户代理发来的邮件后,就把收到的邮件临时存放在邮件缓存队列中,等待时间成熟的时候再发送到接收方的邮件服务器(等待时间的长短取决于邮件服务器的处理能力和队列中待发送的信件的数量 )。

       (4)若现在时机成熟了,发送方的邮件服务器则向接收方的邮件服务器发送邮件缓存中的邮件。在发送邮件之前,发送方的邮件服务器的SMTP客户与接收方的邮件服务器的SMTP服务器需要事先建立TCP连接,之后再将队列中 的邮件发送出去。值得注意的是,邮件不会在因特网中的某个中间邮件服务器落地 。

       (5)接收邮件服务器中的SMTP服务器进程在收到邮件后,把邮件放入收件人的用户邮箱中,等待收件人进行读取。

       (6)收件人在打算收信时,就运行PC机中的用户代理,使用POP3(或IMAP)协议读取发送给自己的邮件。 注意,在这个过程中,收件人是POP3客户,而接收邮件服务器则是POP3客户,箭头的方向是从邮件服务器指向接收用户,因为这是一个“ ”的操作 。

       下面我们根据上面的总体过程介绍下各个组件。

        1.用户代理

        用户代理UAUser Agent )是一个软件包(程序),它的功能是:撰写、阅读、回复和转发报文,还能处理邮箱 (如创建收信箱和发信箱)。共有两种类型的用户代理: 命令驱动GUI命令驱动 属于早期的电子邮件,通过命令发送和接收邮件,而GUI 则是包含图形界面,允许用户使用键盘和鼠标与软件进行交互。


       2. SMTP协议

        SMTP协议 服务器的熟知端口号为25 ,与之前总结过的telnet协议和FTP协议类似的地方是,SMTP协议的客户端和服务器端都是通过命令和响应的形式进行交互 ,即SMTP客户通过命令向SMTP服务器发送操作请求,而服务器则通过3位的数字对响应的请求作出响应。SMTP规定了14条命令和21中应答信息,每条命令有4个字母组成,而每一种应答一般只有一行信息,有一个3位数字的代码开始,后面附上很简单的附加说明。

       邮件传送主要包括3个阶段: 建立连接邮件传送 终止连接

       建立连接阶段:

       1.当SMTP客户端每隔一定时间对邮件缓存扫描一次,如发现有邮件,就使用SMTP的熟知端口号25与接收方的邮件服务器的SMTP服务器建立TCP连接。

       2.接收方SMTP服务器发出“220 Service ready"告诉客户端它已经准备好接收邮件。若服务器未就绪,它就发送代码421(服务器不可用)。

       3.客户发送HELO报文,并使用它的域名地址标志自己。目的是:用来把客户的域名通知服务器,值得注意的是, 在TCP的连接建立阶段,发送方和接收方都是通过它们的IP地址来告诉对方的 。(HELO报文是最初的,用户名和密码都不加密。现在改为EHLO,用户名和密码都进行base64编码发送

       4.服务器响应代码250(请求命令完成)或根据情况的其他一些代码。

      报文传送阶段:

       在SMTP客户与服务器之间建立连接后,发件人就可以与一个或多个收件人交换单个的报文了。若收件人超过一个,则下面步骤3和步骤4将重复进行。

        1.客户发送MAIL FROM报文介绍报文的发送者。它包括发送人的邮件地址(邮箱名和域名,如house@qq)。这个步骤是必要的:因为可以给服务器在返回差错或报文时的返回邮件地址 。

        2.服务器响应代码250(请求命令完成)或其他适当的代码。

        3.客户发送RCPT(收件人)报文,包括收件人的邮件地址,RCPT命令的作用是 : 先弄清接收方系统是否已经准备好接收邮件的准备,然后才发送邮件,这样做视为了避免浪费通信资源,不至于发送了很长的邮件以后才知道是因地址错误 。

        4.服务器响应代码250或其他适当的代码。

        5.客户发送DATA报文对报文的传送进行初始化,DATA命令表示要开始传送邮件的内容了。

        6.服务器响应代码"354 Start mail input: end with <CRLF>.<CRLF>"或其他适当的报文(如421 服务器不可用,500 命令无法识别)。

        7.客户用连续的行发送报文的内容。每一行的行结束时输入 <CRLF>.<CRLF> ,即回车换行.回车换行,表示邮件内容结束。

        8.服务器响应代码(250 请求命令完成)或其他适当的代码。

        值得注意的是:虽然SMTP使用TCP连接试图使邮件的传送可靠,但它并不能保证不丢失邮件。也就是说,使用SMTP传送邮件只能说可以可靠地传送接收方的邮件服务器,在往后的情况就不知道了。接收方的邮件服务器也许会出故障,使收到的服务器全部丢失(在收件人读取信件之前)。

        终止连接

        在报文传送成功后,客户就终止连接。包括如下步骤:

        1.客户发送QUIT命令。

        2.服务器响应221(服务关闭)或其他代码。

        在连接终止阶段后,TCP连接必须关闭。

        3.POP协议

        POP协议, Post office Protocal 。邮件交付的第一阶段和第二阶段使用SMTP,而第三阶段则使用邮件读取协议。SMTP是一个push协议,而第三阶段则使用pull协议,包括POP和IMAP协议,POP主要使用POP3,而IMAP协议则主要使用IMAP4

        POP3采用C/S的工作方式。在接收邮件的用户PC机中的用户代理UA必须运行POP3的客户程序,而在收件人所连接的ISP的邮件服务器中则运行POP的服务器程序。POP服务器只有在用户输入鉴别信息(用户名+密码)后,才允许对方对邮箱进行读取 。

        POP3有 两种工作方式删除方式和保存方式删除方式 就在每一次读取邮件后就把邮箱中的这个邮件删除, 保存方式 就是在读取邮件后仍然在邮箱中保存这个邮件,该方式是通过对之前的POP3工作方式(即删除)的缺点进行弥补,对功能进行扩充。

         4. IMAP协议

        IMAP协议, Internet Mail Access Protocal (因特网邮件读取协议)。 IMAP协议比POP3协议复杂的多,也是按照C/S的工作方式,现在较新的版本是IMAP4。

        在使用IMAP时,用户的PC机上运行IMAP客户程序,然后与接收方的邮件服务器上的IMAP服务器程序建立TCP连接。 POP3不允许用户在邮件服务器上整理自己的邮件,用户在服务器上不能不同的文件夹,POP3也不允许用户在下载邮件之前读取邮件的部分内容,而IMAP则克服了这些POP3的缺点,说白了就是POP3协议不太愿意让用户直接操作服务器,而IMAP正好客户了这些缺点 。

        IMAP4提供了以下功能( 这些功能POP3则没有 ):

        1.用户在下载邮件之前可以检查邮件的首部。

        2.用户在下载邮件之前可以用特定的字符串搜索电子邮件的内容。

        3.用户可以部分地下载电子邮件。

        4.用户可以在邮件服务器上创建、删除邮箱,或对邮箱重命名。

        5.为了存放电子邮件,用户可以在文件夹中创建分层次的邮箱。

        注意 :不用把邮件的发送协议SMTP协议与邮件的读取协议POP或IMAP协议弄混淆了。发送人的UA向发送邮件服务器发送邮件,以及发送方的邮件服务器向接受方的邮件服务器发送邮件都是采用SMTP协议,而收件人的UA从邮件接收服务器中接收文件则采用的是POP协议或IMAP协议。

       5. MIME

        MIME协议( Multipurpose Internet Mail Extensions ),通用因特网邮件扩充协议 ,作为SMTP的一种辅助协议,其引入是为了克服SMTP的如下不足:

        1.SMTP只能发送使用NVT( 虚拟网络终端 7位ASCII码格式的报文,它不能使用NVT 7位ASCII码不支持的语言(如汉语,日语,德语等)。

        2.SMTP不能传送可执行文件或其他二进制对象(如图像文件)。

        3.SMTP不支持音频或视频文件。

        4.SMTP发送的邮件的长度受到限制。

        为了克服以上的不足,便引入了MIME协议,MIME协议是一种扩展协议性的辅助协议,“扩充”指的是只是对原来协议的扩展,而不是取代。它允许非ASCII码数据能够通过电子邮件传送。MIME在发送方把非ASCII码数据转换为NVT ASCII数据,之后的工作再交给SMTP完成,在接收方再将NVT ASCII数据还原成原来的数据。MIME的体系结构如下:


       MIME定义了5种首部,用来加在原始的电子邮件部分以定义参数的转换,这五种首部分别是: MIME-Version( MIME版本 )、 Constent-Type ( 内容类型 )、 Content-Transfer-Encoding 内容-传送-编码 )、 Content-Id ( 内容-标识 )和 Content-Description ( 内容描述 )。

        MIME版本 :定义了MIME使用的版本。

       内容-类型 :定义报文主体使用的数据类型和子类型,用<数据类型/子类型>表示。

        内容-传送-编码 :定义了邮件的主体在传送时是如何编码的。

       内容-标识 :在多报文的环境中唯一地标识报文。

        内容描述 :定义了主体是否为图像、音频或视频。

        6. 基于WWW的邮件

        基于WWW的邮件收发系统的体系结构与普通的电子邮件收发系统不同,基于WWW的邮件收发系统的整个过程描述如下:

        1.从发送者的浏览器传送到发送方邮件服务器是通过HTTP协议(而一般的则是通过SMTP协议)。

        2.从发送方服务器到接收方邮件服务器是通过SMTP协议(与一般的相同)。

        3.从接收方到接收者是通过HTTP协议(而一般的则是POP3协议或IMAP协议)。

        具体如下图所示:


参考资料

[1]《计算机网络(第5版) 谢希仁》

[2]《TCP/IP协议族 第4版》


  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Ubuntu 20.04是一款非常流行的Linux操作系统,它可以非常方便地配置邮件服务器SMTPIMAP。 首先,我们需要安装邮件服务器软件。Ubuntu 20.04系统中默认安装了Postfix邮件服务器,我们只需要打开终端输入以下命令进行安装即可: sudo apt-get update sudo apt-get install postfix 接下来,我们需要配置Postfix邮件服务器。我们可以在/etc/postfix/main.cf文件中进行配置。以下是一个简单的配置示例: myhostname = mail.example.com mydestination = example.com, mail.example.com, localhost.example.com, localhost mynetworks = 127.0.0.0/8, [::1]/128 smtpd_banner = $myhostname ESMTP smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous 在上述示例配置中,邮件服务器的主机名是mail.example.com,邮件服务器可以发送电子邮件到example.com,mail.example.com和本地主机名localhost.example.com。邮件服务器还可以忽略其他来源的Emails。 我们还需要配置SMTPIMAP认证。可以使用Dovecot软件提供这些服务。我们可以使用以下命令来安装Dovecot: sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d 接下来我们可以在/etc/dovecot/conf.d/10-auth.conf和/etc/dovecot/conf.d/10-master.conf两个配置文件中进行认证配置。 最后,重启邮件服务器和Dovecot服务,我们就可以通过SMTPIMAP协议使用邮件服务器发送接收邮件了! ### 回答2: 配置邮件服务器SMTPIMAP是一个相对复杂的过程,需要正确地设置各种参数,以确保基于Ubuntu 20.04的邮件服务器可以顺利地工作。下面是一些步骤供参考: 1. 安装邮件服务器软件:Ubuntu 20.04中默认安装了Postfix邮件服务器软件,运行以下命令进行安装: sudo apt-get update sudo apt-get install postfix 2. 配置SMTP服务器:默认情况下,Postfix配置为仅在本地主机上接受邮件。要允许其他计算机发送邮件,请编辑/etc/postfix/main.cf,在“myhostname”行下添加以下行: mydestination = example.com, localhost.example.com, localhost 其中“example.com”应替换为您的域名。保存配置更改并重新启动Postfix服务: sudo service postfix restart 3. 配置IMAP服务器:Ubuntu 20.04默认安装Dovecot IMAP服务器软件。编辑/etc/dovecot/conf.d/10-auth.conf文件,在“disable_plaintext_auth”行下添加以下行: auth_mechanisms = plain login 接下来,在/etc/dovecot/conf.d/10-master.conf文件中找到以下行,将其注释掉: #unix_listener /var/spool/postfix/private/auth { #mode = 0660 #user = postfix #group = postfix #} 最后,重新启动Dovecot服务: sudo service dovecot restart 4. 测试SMTPIMAP服务器:你可以使用常见邮件客户端,如Outlook或Thunderbird,登录到你的SMTPIMAP服务器并发送/接收邮件来测试服务器的配置。 以上是配置Ubuntu 20.04的邮件服务器SMTPIMAP的一些基本步骤。这个过程可以有很多的细节,需要逐一处理以确保正确地连接和使用邮件服务器。 ### 回答3: Ubuntu20.04作为一款免费的开源操作系统,具有众多功能强大的特性,配置邮件服务器 stmp imap也是非常方便的。下面介绍一下如何在Ubuntu20.04上配置邮件服务器。 首先,我们需要安装基本的邮件服务软件,其中包括 Postfix、Dovecot、SASL 和 AnonTLS 等。我们可以使用以下命令来完成软件的安装: sudo apt-get update sudo apt-get install postfix dovecot-core dovecot-imapd dovecot-pop3d sasl2-bin libsasl2-modules-ldap openssl-blacklist 安装完毕后,我们需要通过以下命令来配置 Postfix: sudo nano /etc/postfix/main.cf 在该文件中,我们需要做如下配置: myhostname = your.mail.server.com mydomain = your.mail.server.com myorigin = your.mail.server.com inet_interfaces = all mydestination = your.mail.server.com, localhost smtpd_banner = $myhostname ESMTP 在这些设置中,myhostname、mydomain 和 myorigin 都应该设置为您的邮件服务器的主机名。接下来,我们需要配置 Dovecot,在 /etc/dovecot/dovecot.conf 文件中增加以下设置: protocols = imap pop3 auth_mechanisms = plain login disable_plaintext_auth = no ssl = no pop3_uidl_format = %08Xu%08Xv 在这些设置中,protocols 配置了 Dovecot 所支持的客户端访问协议,auth_mechanisms 配置了认证方式,disable_plaintext_auth 设置为 no 表示能够使用明文密码认证登录。pop3_uidl_format 是用于 POP3 下载时保证每个邮件的唯一性的设置。 此时我们已完成 SMTPIMAP 邮件服务器的基本配置。接下来我们需要设置邮件用户的身份认证信息。具体的说明如下: 1. 在 /etc/saslpasswd2 文件中新建帐户信息,每行只能记录一个帐户,格式为“username: password”。 2. 我们需要设置 saslauthd 的配置参数,在 /etc/default/saslauthd 文件中设置以下参数: START=yes AUTHMECH=shadow MECHANISMS="ldap plain" ARGS="-c -m /var/run/saslauthd -O /etc/saslauthd.conf" 3. 根据上述命令执行后,我们需要在 /etc/saslauthd.conf 文件中设置 SASL 认证的基本参数: verbosity: 0 mech_options: <empty> pwcheck_method: saslauthd mech_list: plain login 4. 最后,我们需要设置用户帐户在 LDAP 数据库中的信息,在 /etc/postfix/sasl/smtpd.conf 文件中增加以下设置: pwcheck_method: saslauthd mech_list: plain login log_level: 4 auxprop_plugin: sasldb mech_disable: CRAM-MD5 DIGEST-MD5 至此,我们在 Ubuntu20.04 上已经设置好了邮件服务器,我们可以通过 IMAPPOP3、SMTP 等协议访问邮件服务器,获取邮箱中存储的邮件信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值