1. SMTP协议简介
SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。
SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。
2. 工作过程
SMTP协议的工作过程可分为如下3个过程:
(1)建立连接:在这一阶段,SMTP客户请求与服务器的25端口建立一个TCP连接。一旦连接建立,SMTP服务器和客户就开始相互通告自己的域名,同时确认对方的域名。
(2)邮件传送:利用命令,SMTP客户将邮件的源地址、目的地址和邮件的具体内容传递给SMTP服务器,SMTP服务器进行相应的响应并接收邮件。
(3)连接释放:SMTP客户发出退出命令,服务器在处理命令后进行响应,随后关闭TCP连接。
3. 常用命令
SMTP 协议中一共定义了18条命令,但是发送一封电子邮件的过程通常只需要6条命令,我将这6调命令/响应的语法格式总结如下:
注意:SMTP命令不区分大小写,但参数区分大小写。<>内代表参数,<SP>是空格,<CRLF>代表\r\n
SMTP命令及格式 | 描述 |
---|---|
EHLO <domain><CRLF> | ehlo命令是SMTP邮件发送程序与SMTP邮件接受程序建立简介后必须发送的第一条SMTP命令,参数<domain>表示SMTP邮件发送者的名称(邮箱名) |
AUTH <para><CRLF> | 告诉SMTP服务器认证方式,参数para表示回应的认证方式,通常是AUTH LOGIN |
MAIL FROM:<reverse-path><CRLF> | 此命令用于指定邮件发送者的邮箱地址,参数reverse-path表示发件人的邮箱地址 |
RCPT TO:<forword-path><CRLF> | 此命令用于指定邮件接受者的邮箱地址,参数forword-path表示发件人的邮箱地址,如果邮件要发送给多个接受者,那么应该使用多条RCPT TO命令来分别指定每一个接受者的邮箱地址 |
DATA<CRLF> | 此命令用于表示SMTP邮件发送程序准备开始传送邮件内容,在这个命令后面发送的所有数据都将被当做邮件内容,直到遇到<CRLF>.<CRLF>表示符,则表示邮件内容结束 |
QUIT<CRLF> | 此命令表示要结束邮件发送过程,SMTP邮件接受程序接收到此名后,将关闭与SMTP邮件服务器的连接 |
4. 发送邮件步骤
大家可能光看这些命令不太清楚,下面我总结了一下使用Smtp协议手工发送邮件的步骤: