使用SMTP发送电子邮件
描述SMTP的基本操作,有如下常见的情景。假如Alice想给Bob发送一封简单的ASCII报文:
1)Alice启动她的邮件代理服务器并提供Bob的邮件地址(例如:***@163.com),撰写邮件,通过用户代理发送该邮件。
2)Alice的用户代理把报文发送给Alice的邮件服务器,该邮件再这里被放在报文发送队列中。
3)运行在Alice邮件服务器上的SMTP客户端发现了在报文队列中的该报文,他就创建一个到运行在Bob的邮件服务器上的SMTP服务器的TCP连接。
4)在经过一些初始SMTP握手后,SMTP客户端通过该TCP连接发送Alice的报文。
5)在Bob的有劲啊服务器上,SMTP的服务器接收该报文,Bob的邮件服务器然后将该报文放入Bob的邮箱中。
6)再Bob方便的时候,他调用用户代理阅读该报文。
如下图所示:
下面简单介绍发送邮件时,6步操作的具体内容。
SMTP客户机(运行在发送方邮件服务器上)在25号端口建立一个到SMTP的服务器(运行在接收方邮件服务器上)的TCP连接。如果某服务器没有开机,客户机会再稍后继续尝试连接。一旦连接建立,服务器与客户机之间执行一些应用层的握手操作,相互进行自我介绍,然后再发送数据报文。在SMTP握手阶段,SMTP客户机指明发送方的邮件地址(产生报文的用户)和接收方的邮件地址。一旦该SMTP客户机和服务器彼此介绍之后,客户机发送该报文。SMTP能利用TCP提供的可靠数据传输无差错地将邮件投递到服务器。该客户机如果有另外的报文要发送到该服务器,就在该相同的TCP连接上重复当前处理;否则,它指示TCP关闭连接。
SMTP客户机(C)和SMTP服务器(S)之间交换报文脚本的例子:客户机的主机名为crepes.fr,服务器的主机名为hamburger.edu。以c:开头的ASCII码文本行就是客户机交给其TCP套接字的哪些行,以s:开头的ASCII码则是服务器发送给其TCP套接字的哪些行,一旦TCP连接起来,就开始了下列过程:
S:220 hamburger.edu
C:HLo crepes.fr
S:250 Hello crepes.fr, pleased to meet you
C:MAIL FROM: <alice@crepes.fr>
S:250 alice@crepes.fr ··· Sender ok
C:RCPT TO: <bob@hamberger.edu ... Recipient ok
C:DATA
S:354 Enter mail, end with "." on a line by itself
C:Do you like ketchup?
C:How about pickles?
C:.
S:250 Message accepted for delivery
C:QUIT
S:221 hamburger.edu closing connection
在客户机向服务器发送数据时,客户机向服务器发送了5条命令:HELO(Hello的缩写)、MAIL FROM、RCPT TO、 DATA以及QUIT。这些命令都是自解释的。客户机发送一个只包含一个句点的行,告诉服务器该报文结束了(按照ASCII码的表示方法,每个报文用CRLF.CRLF结束,其中的CR和LF分别表示回车和换行)。需要指出的是SMTP用的是持久连接:如果发送邮件的服务器有几个报文发往同一个接收邮件的服务器,他可以通过同一个TCP连接发送所有这些报文。对每个报文,客户机都用一个新的MAIL FROM:crepes.fr开始,类似,独立的一个句点表示报文发送结束,当所有邮件发送完成后才发送QUIT。
使用SMTP发送电子邮件相关推荐
- 在Python中使用SMTP发送电子邮件
Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作.第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写 ...
- WordPress配置SMTP发送电子邮件(QQ邮箱)
Wordpress通过PHP自带的mail函数实现电子邮件的发送成功率极低,现有的各类邮箱,例如QQ邮箱.新浪邮箱.163邮箱等,基本不支持PHP语言的mail函数实现的邮件发送,因此,需要配置基于S ...
- C# 网络编程之基于SMTP发送电子邮件
本文主要讲述基于C#网络编程的发送邮件的编程,邮件发送功能是基于邮件协议的,常见的电子邮件协议有SMTP(简单邮件传输协议).POP3(邮局协议).IMAP(Internet邮件访问协议),文章主要 ...
- java smtp_java通过smtp发送电子邮件
packagecom.sm.modules.oa.web;importjavax.mail.Session;importjavax.mail.Transport;importjavax.mail.in ...
- java通过smtp发送电子邮件,部分解决554 DT:SPM 163问题
package com.sm.modules.oa.web;import javax.mail.Session; import javax.mail.Transport; import javax.m ...
- GO(golang)语言使用SMTP发送电子邮件,简单和复杂带附件cc,bcc
转https://studygolang.com/articles/2098 核心代码:smtp.SendMail(host, auth, user, send_to, msg),auth := sm ...
- php gmail smtp,使用PHP通过Gmail SMTP发送电子邮件
我一直使用 PHPMailer来满足我的所有邮件需求. 它已经内置支持GMail作为服务器(并且它是免费的) 我认为您的问题是您尝试使用PHP的邮件设置而不是PHPMailer 确保您具有以下设置: ...
- 利用python SMTP 发送电子邮件
python 发送邮件!!! 直接发代码! 不会有bugk哦
- iphone发送邮件html,iPhone使用smtp服务器发送电子邮件?
在我的应用程序中,我能够使用smtp服务器发送电子邮件,因为我输入了正确的电子邮件ID和密码. 但当我输入我的Gmail或雅虎帐户详细信息时,我无法发送邮件. 因为我设置了relayHost = @& ...
最新文章
- 读书:个人成长 -- 即兴演讲
- 搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡
- Python中range和xrange的区别
- ajaxToolKit中 的折叠面板用法--Accordion
- CentOS 7 yum方式快速安装MongoDB
- 网络知识:路由器不关闭这个功能,视频越刷越卡!
- android--Activity有返回值的跳转
- 了解 C# foreach 内部语句和使用 yield 实现的自定义迭代器
- 右移函数(字符串,数组)
- CEF3:https 请求返回状态码canceled
- 旷视Face++回清华求教AI本质创新,姚期智授2锦囊,出任首席顾问
- day6面向对象--继承、多态
- Julia: Beginning deep learning with 500 lines of Julia
- 个人项目集 - Oliver Chu
- 中职生计算机求职信350,护士求职信350字
- Flutter插件shared_preferences数据存储的使用
- 关于hibernate检索策略
- flink 的用途 场景
- 单利 java_JAVA中的单利
- 世界上最远的距离——泰戈尔