用Java编程实现SMTP服务器功能(4)

来源:asp之家 时间:2010-03-13 18:46:00 

3.SmtpMail 类的实现

  采用Open()方法,建立与邮件服务器之间的TCP/IP 连接,创建套接字,并且得到发送命令所用的输出流Send 和接收服务器相应所用的输入流Rev。Open()方法的代码如下:

public int open(String serverName, int port){
try{
mailSocket = new Socket(serverName, port);
send = new PrintWriter(mailSocket.getOutputStream(), true);
recv = new BufferedReader(new InputStreamReader(mailSocket.getInputStream()));
String s1 = recv.readLine();
char c = s1.charAt(0);
if((c == '4') | (c == '5'))
return 0;
}
catch(Exception e){
return 0;
}
return 1;
}


  在SmtpMail 类中,通过Transmit()方法完成发送任务。Transmit()方法的代码如下:

public int transmit(){
boolean flag = true;
//发送HELO 命令
if(domain.length() != 0){
int i = sendString("HELO " + domain);
if(i != 1)
return 0;
}
//发送MAIL FROM 命令(发件人)
if(from.length() != 0){
int j = sendString("MAIL FROM:" + from);
if(j != 1)
return 0;
}
//发送RCPT TO 命令(收件人)
if(to.length() != 0){
int k = sendString("RCPT TO:" + to);
if(k != 1)
return 0;
}
//发送邮件正文(DATA 命令)
if(sendString("DATA") != 1)
return 0;
//发送邮件头信息
for(int l = 0; l < x_set.size(); l += 2){
String s = (String)x_set.elementAt(l);
send.println(s + ": " + x_set.elementAt(l + 1));
}
//发送时间及相关内容格式说明
if(x_set.indexOf("Date") < 0)
send.println("Date: " + (new Date()).toString());
........
........


  使用SendString()方法来发送字符串命令,并且接收邮件服务器的响应信息,判断命令是否被接收。返回1表示命令被拒绝执行,返回0表示命令被接受。SendString()方法的代码如下:

private int sendString(String s){
String s1 = "";
try{
send.println(s);
s1 = recv.readLine();
}
catch(Exception e){
System.out.print(s1);
return 0;
}
if(s1.length() == 0)
return 0;
char c = s1.charAt(0);
return !((c == '4') | (c == '5')) ? 1 : 0;
}


  使用Close()方法来关闭与服务器之间的套接字连接。该方法发送“QUIT”命令,收到响应消息后,才真正关闭连接。Close()方法的代码如下:

public int close(){
int i = 0;
try{
i += sendString("QUIT");
mailSocket.close();
}
catch(Exception e){
return 0;
}
return i == 0 ? 1 : 0;
}

标签:smtp服务器,java服务器
0
投稿
asp之家 网站运营 m.aspxhome.com