第一部分邮件传输协议
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)定义了邮件客户端软件与SMTP服务器之间,以及两台SMTP服务器间的通信规则。SMTP服务器之间的通信规则。
SMTP协议中一共定义了18条命令,发送一封电子邮件的过程通常只需要使用其中6条命令,表1中按照发送命令的先后顺序列出了这6条命令,并描述了其语法格式及功能说明,其中,
表1
SMTP命令及格式说明
ehlo
的第一条SMTP命令。参数
ehlo命令用于替代传统SMTP协议中的helo命令
auth
邮件发送程序提示它所采用的认证方式,SMTP邮件发送程序接着应该使用这
个命令回应SMTP邮件接收程序,参数
SMTP邮件接收程序先前提示的认证方式。
mail
箱地址。
rept
箱地址。如果邮件要发送多个接收者,那么应使用多条rept
别指定每一个接收者的邮箱地址。
data
发送的所有数据都将被当做邮件内容,直至遇到“
则表示邮件内容结束。
quit
闭与SMTP邮件发送程序的网络连接。
对于SMTP邮件发送程序发送的每一条命令,SMTP邮件程序接收程序都将回应一条响应信息。每条响应信息都以一个响应状态码开发如下所示:
250 ok
响应状态吗用于表示SMTP服务器对请求命令的处理结果和状态,它是一个三位的十进制数。响应状态码的最高位数字代表了不同的分类,当其为2时表示命令执行成功,为5时表示命令执行失败。为3时表示命令没有完成。
动手实践:借助telnet程序手工发送邮件
1)在sina()中申请两个电子邮件地址,笔者在使用的两个邮箱分别为jspdevelop@和
fpwjp@,第一个邮箱的登录为:javamail,读者应注册自已的电子邮箱进行实验。
2)要给某个SMTP服务器发送邮件,首先要获知该SMTP服务器的主机名,其中新浪的SMTP服务器主机名为
25。
3)当SMTP服务器要对邮件客户端软件进行用户身份验证时,邮件客户端软件需要对用户名和密码进行BASE64编
码后再传递给SMTP服务器,因此要编写一个能对用户名和密码进行BASE64编码的工具程序。下面是用Java 语言编写的一个对用户名和密码分别进行BASE64编码的工具程序。
例:BASE64Util.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import sun.misc.BASE64Encoder;
class BASE64Util
{
public static void main(String[] args) throws IOException
{
System.out.println("请输入用户名:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String userName=in.readLine();
System.out.print("请输入密码:");
String password=in.readLine();
BASE64Encoder encoder=new BASE64Encoder();
System.out.println("编码后的用户名为:"+encoder.encode(userName.getBytes()));
System.out.println("编码后的密码为:"+encoder.encode(password.getBytes()));
}
}
启动windows命令行窗口,编译并运行这个Java程序,接着根据程序的提示输入已注册的sina邮箱的用户名和密码。如图1-1所示。
图1-1
4)重新开启一个windows命令行窗口,使用telnet命令连接到sina的SMTP服务器的25号端口,即在命令行窗口中输入
如下一行内容。
telnet 25
该命令的正常执行结果如图1-2所示。
图1-2
图1-2中显示的内容是服务器返回给客户端的响应信息,其中包含三部分内容,各部分的意义如下:
●220是邮件服务器返回给客户的响应状态码,它表示邮件服务器准备就绪(service ready)。
●表示当前进行的响应的邮件服务器的主机名。
●ESMTP表示当前邮件服务器支持扩展SMTP协议。