Java的网络功能非常强大,开发和使用也非常简单,难怪microsoft极力要争回程序语言的霸主地位。根据smtp协议使用java Socket写了" />
龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

java开发的邮件发送程序

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
?XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" /> Java的网络功能非常强大,开发和使用也非常简单,难怪microsoft极力要争回程序语言的霸主地位。根据smtp协议使用java Socket写了

<?XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" /> 


  Java的网络功能非常强大,开发和使用也非常简单,难怪microsoft极力要争回程序语言的霸主地位。根据smtp协议使用java Socket写了一个发送邮件的程序,
  实现的原理非常简单,首先建立和邮件服务器的Socket连接,然后进行和服务器握手,然后发送smtp指令,并封装邮件体,然后发送即可。
  
  import java.net.*;
  import java.io.*;
  import java.util.*;
  
  public class SMTPSender{
  
  Socket socket=null;
  PrintWriter outData=null;
  BufferedReader inData=null;
  
  String smtpServer="";
  
  String user="";
  String pass="";
  String from="";
  
  String LINEFEED=" ";
  boolean isNeedAuthLogin=false;
  Vector to=new Vector();
  
  public static void main(String[] args){
  SMTPSender smtp=new SMTPSender();
  smtp.setMailServer("mail.ehawa.com");
  smtp.setMailFrom("root@ehawa.com","???","???");
  smtp.addMailTo("root@ehawa.com");
  if(smtp.send("hello","这是一个测试!")){
  System.out.println("邮件发送成功!");
  }else System.out.println("邮件发送失败!");
  }
  public void setMailServer(String s){
  smtpServer=s;
  }
  public void setMailFrom(String s,String uid,String pwd){
  this.from=s;
  this.user=uid;
  this.pass=pwd;
  this.isNeedAuthLogin=(this.user!=null&&this.pass!=null&&!this.user.equals("")&&!this.pass.equals(""));
  }
  public boolean addMailTo(String mailAddr){
  to.addElement(mailAddr);
  return true;
  }
  public boolean send(String subject,String content){
  try{
  if(smtpServer==nullsmtpServer.equals(""))return false;
  if(from==nullfrom.equals(""))return false;
  if(to.size()<1)return false;
  socket=new Socket(smtpServer,25);
  outData=new PrintWriter(socket.getOutputStream());
  inData=new BufferedReader(new InputStreamReader(socket.getInputStream()));
  //与邮件服务器连接成功
  readResponse("220");
  //HELO host
  sendRequest("HELO "+smtpServer+LINEFEED);
  readResponse("250");
  if(isNeedAuthLogin){
  //AUTH LOGIN
  sendRequest("AUTH LOGIN"+LINEFEED);
  readResponse("334");
  //USERNAME:
  sendRequest(new String(Base64.encodeString(user))+LINEFEED);
  readResponse("334");
  //PASSWord:
  sendRequest(new String(Base64.encodeString(pass))+LINEFEED);
  readResponse("235");
  }
  //MAIL FROM:<..>
  sendRequest("MAIL FROM:<"+from+">"+LINEFEED);
  readResponse("250");
  //RCPT TO:<..>
  for(Enumeration enu=to.elements();enu.hasMoreElements();){
  String to1=(String)enu.nextElement();
  sendRequest("RCPT To:<"+to1+">"+LINEFEED);
  readResponse("250");
  }
  //DATA
  sendRequest("DATA"+LINEFEED);
  readResponse("354");
  //邮件内容
  StringBuffer s1=new StringBuffer("From: <"+from+">"+LINEFEED);
  s1.append("To: <"+to+">"+LINEFEED);
  s1.append("Subject: "+subject+LINEFEED);
  s1.append("Date: "+new java.util.Date().toLocaleString()+LINEFEED);
  s1.append("Content-Type: text/plain;charset="GB2312""+LINEFEED);
  s1.append(LINEFEED);
  s1.append(content);
  s1.append(LINEFEED+"."+LINEFEED);//发送
  sendRequest(s1.toString());
  readResponse("250");
  //QUIT退出
  sendRequest("QUIT"+LINEFEED);
  readResponse("221");
  try{
  inData.close();
  inData=null;
  }catch(Exception ex){}
  try{
  outData.close();
  outData=null;
  }catch(Exception ex){}
  try{
  socket.close();
  socket=null;
  }catch(Exception ex){}
  }catch(Exception e){
  return false;
  //e.printStackTrace();
  }
  return true;
  }
  private void readResponse(String cmd)throws Exception{
  String tmp=inData.readLine();
  if(tmp.startsWith(cmd));//System.out.println(" [S:]"+tmp);
  else throw new Exception("##########邮件发送失败!##########"+tmp);
  while(tmp.startsWith(cmd+"-"))tmp=inData.readLine();
  }
  private void sendRequest(String msg){
  //System.out.print("***[C:]"+msg);
  outData.write(msg);
  outData.flush();
  }
  public void close(){
  try{
  inData.close();
  inData=null;
  }catch(Exception ex){}
  try{
  outData.close();
  outData=null;
  }catch(Exception ex){}
  try{
  socket.close();
  socket=null;
  }catch(Exception ex){}
  }
  }


  
精彩图集

赞助商链接