网站首页 手机版
 注册 登录
您现在的位置: 畅无忧设计 >> 系统编程 >> Java >> 正文
最新文章
· java中类的继承的总结
· 用java实现发邮件
热门文章
 用java实现发邮件
 java中类的继承的总结
相关文章
没有相关文章
用java实现发邮件
来源:JavaEye 更新时间:2010/8/8 23:04:45 阅读次数:
字体:[ ] 我要投稿

用java实现发邮件的原理非常简单,首先建立和邮件服务器的Socket连接,然后进行和服务器握手,然后发送smtp指令,并封装邮件体,然后发送即可。

Java代码:

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="\r\n";  
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==null||smtpServer.equals(""))return false;  
if(from==null||from.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){}  
}  
}

  • 上一篇文章: 没有了
  • 下一篇文章:
  • 关于我们 - 联系我们 - 广告服务 - 在线投稿 - 友情链接 - 网站地图 - 版权声明
    CopyRight 2008-2010, CWYDESIGN.COM - 畅无忧设计, Inc. All Rights Reserved
    滇ICP备09005765号