导读:
Java的网络功能非常强大,开发和使用也非常简单,难怪microsoft极力要争回程序语言的霸主地位。笔者根据smtp协议使用java Socket写了一个发送邮件的程序,将此与各位分享。
实现的原理非常简单,首先建立和邮件服务器的Socket连接,然后进行和服务器握手,然后发送smtp指令,并封装邮件体,然后发送即可。大家不妨一试。由什么问题可以和我联系:Email:linlichao@163.com;Homepage:http://www.ehawa.com。
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() 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:<..><br> sendRequest("MAIL FROM:"+LINEFEED); <br> readResponse("250"); <br> //RCPT TO:<..><br> for(Enumeration enu=to.elements();enu.hasMoreElements();){ <br> String to1=(String)enu.nextElement(); <br> sendRequest("RCPT To:"+LINEFEED); <br> readResponse("250"); <br> } <br> //DATA <br> sendRequest("DATA"+LINEFEED); <br> readResponse("354"); <br> //邮件内容 <br> StringBuffer s1=new StringBuffer("From: "+LINEFEED); <br> s1.append("To: "+LINEFEED); <br> s1.append("Subject: "+subject+LINEFEED); <br> s1.append("Date: "+new java.util.Date().toLocaleString()+LINEFEED); <br> s1.append("Content-Type: text/plain;charset=\"GB2312\""+LINEFEED); <br> s1.append(LINEFEED); <br> s1.append(content); <br> s1.append(LINEFEED+"."+LINEFEED);//发送 <br> sendRequest(s1.toString()); <br> readResponse("250"); <br> //QUIT退出 <br> sendRequest("QUIT"+LINEFEED); <br> readResponse("221"); <br> try{ <br> inData.close(); <br> inData=null; <br> }catch(Exception ex){} <br> try{ <br> outData.close(); <br> outData=null; <br> }catch(Exception ex){} <br> try{ <br> socket.close(); <br> socket=null; <br> }catch(Exception ex){} <br> }catch(Exception e){ <br> return false; <br> //e.printStackTrace(); <br> } <br> return true; <br> } <br> private void readResponse(String cmd)throws Exception{ <br> String tmp=inData.readLine(); <br> if(tmp.startsWith(cmd));//System.out.println(" [S:]"+tmp); <br> else throw new Exception("##########邮件发送失败!##########"+tmp); <br> while(tmp.startsWith(cmd+"-"))tmp=inData.readLine(); <br> } <br> private void sendRequest(String msg){ <br> //System.out.print("***[C:]"+msg); <br> outData.write(msg); <br> outData.flush(); <br> } <br> public void close(){ <br> try{ <br> inData.close(); <br> inData=null; <br> }catch(Exception ex){} <br> try{ <br> outData.close(); <br> outData=null; <br> }catch(Exception ex){} <br> try{ <br> socket.close(); <br> socket=null; <br> }catch(Exception ex){} <br> } <br> } <br> <br> Java的网络功能非常强大,开发和使用也非常简单,难怪microsoft极力要争回程序语言的霸主地位。笔者根据smtp协议使用java Socket写了一个发送邮件的程序,将此与各位分享。实现的原理非常简单,首先建立和邮件服务器的Socket连接,然后进行和服务器握手,然后发送smtp指令,并封装邮件体,然后发送即可。大家不妨一试。由什么问题可以和我联系:Email:linlichao@163.com;Homepage:http://www.ehawa.com。 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() sendRequest("MAIL FROM:"+LINEFEED); readResponse("250");//RCPT TO:<..> for(Enumeration enu=to.elements();enu.hasMoreElements();){ String to1=(String)enu.nextElement(); sendRequest("RCPT To:"+LINEFEED); readResponse("250");}//DATA sendRequest("DATA"+LINEFEED); readResponse("354");//邮件内容 StringBuffer s1=new StringBuffer("From: "+LINEFEED); s1.append("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){}}} <br><br>本文转自 <br><a href="http://www.cn-java.com/www1/?action-viewnews-itemid-2600">http://www.cn-java.com/www1/?action-viewnews-itemid-2600</a></..></..></..>
Java的网络功能非常强大,开发和使用也非常简单,难怪microsoft极力要争回程序语言的霸主地位。笔者根据smtp协议使用java Socket写了一个发送邮件的程序,将此与各位分享。
实现的原理非常简单,首先建立和邮件服务器的Socket连接,然后进行和服务器握手,然后发送smtp指令,并封装邮件体,然后发送即可。大家不妨一试。由什么问题可以和我联系:Email:linlichao@163.com;Homepage:http://www.ehawa.com。
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() 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:<..><br> sendRequest("MAIL FROM:"+LINEFEED); <br> readResponse("250"); <br> //RCPT TO:<..><br> for(Enumeration enu=to.elements();enu.hasMoreElements();){ <br> String to1=(String)enu.nextElement(); <br> sendRequest("RCPT To:"+LINEFEED); <br> readResponse("250"); <br> } <br> //DATA <br> sendRequest("DATA"+LINEFEED); <br> readResponse("354"); <br> //邮件内容 <br> StringBuffer s1=new StringBuffer("From: "+LINEFEED); <br> s1.append("To: "+LINEFEED); <br> s1.append("Subject: "+subject+LINEFEED); <br> s1.append("Date: "+new java.util.Date().toLocaleString()+LINEFEED); <br> s1.append("Content-Type: text/plain;charset=\"GB2312\""+LINEFEED); <br> s1.append(LINEFEED); <br> s1.append(content); <br> s1.append(LINEFEED+"."+LINEFEED);//发送 <br> sendRequest(s1.toString()); <br> readResponse("250"); <br> //QUIT退出 <br> sendRequest("QUIT"+LINEFEED); <br> readResponse("221"); <br> try{ <br> inData.close(); <br> inData=null; <br> }catch(Exception ex){} <br> try{ <br> outData.close(); <br> outData=null; <br> }catch(Exception ex){} <br> try{ <br> socket.close(); <br> socket=null; <br> }catch(Exception ex){} <br> }catch(Exception e){ <br> return false; <br> //e.printStackTrace(); <br> } <br> return true; <br> } <br> private void readResponse(String cmd)throws Exception{ <br> String tmp=inData.readLine(); <br> if(tmp.startsWith(cmd));//System.out.println(" [S:]"+tmp); <br> else throw new Exception("##########邮件发送失败!##########"+tmp); <br> while(tmp.startsWith(cmd+"-"))tmp=inData.readLine(); <br> } <br> private void sendRequest(String msg){ <br> //System.out.print("***[C:]"+msg); <br> outData.write(msg); <br> outData.flush(); <br> } <br> public void close(){ <br> try{ <br> inData.close(); <br> inData=null; <br> }catch(Exception ex){} <br> try{ <br> outData.close(); <br> outData=null; <br> }catch(Exception ex){} <br> try{ <br> socket.close(); <br> socket=null; <br> }catch(Exception ex){} <br> } <br> } <br> <br> Java的网络功能非常强大,开发和使用也非常简单,难怪microsoft极力要争回程序语言的霸主地位。笔者根据smtp协议使用java Socket写了一个发送邮件的程序,将此与各位分享。实现的原理非常简单,首先建立和邮件服务器的Socket连接,然后进行和服务器握手,然后发送smtp指令,并封装邮件体,然后发送即可。大家不妨一试。由什么问题可以和我联系:Email:linlichao@163.com;Homepage:http://www.ehawa.com。 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() sendRequest("MAIL FROM:"+LINEFEED); readResponse("250");//RCPT TO:<..> for(Enumeration enu=to.elements();enu.hasMoreElements();){ String to1=(String)enu.nextElement(); sendRequest("RCPT To:"+LINEFEED); readResponse("250");}//DATA sendRequest("DATA"+LINEFEED); readResponse("354");//邮件内容 StringBuffer s1=new StringBuffer("From: "+LINEFEED); s1.append("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){}}} <br><br>本文转自 <br><a href="http://www.cn-java.com/www1/?action-viewnews-itemid-2600">http://www.cn-java.com/www1/?action-viewnews-itemid-2600</a></..></..></..>