posts - 56,  comments - 12,  trackbacks - 0
          實(shí) 現(xiàn)的原理非常簡單,首先建立和郵件服務(wù)器的Socket連接,然后進(jìn)行和服務(wù)器握手,然后發(fā)送smtp指令,并封裝郵件體,然后發(fā)送即可。大家不妨一試。


          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","這是一個(gè)測試!")){
          System.out.println("郵件發(fā)送成功!");
          }else System.out.println("郵件發(fā)送失敗!");
          }
          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()));
          //與郵件服務(wù)器連接成功
          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");
          //郵件內(nèi)容
          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);//發(fā)送
          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("##########郵件發(fā)送失敗!##########"+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){}
          }
          }
          posted on 2007-01-19 00:07 苦笑枯 閱讀(214) 評論(0)  編輯  收藏 所屬分類: Java
          收藏來自互聯(lián)網(wǎng),僅供學(xué)習(xí)。若有侵權(quán),請與我聯(lián)系!

          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(2)

          隨筆分類(56)

          隨筆檔案(56)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 清河县| 德清县| 旅游| 方正县| 德惠市| 福贡县| 阿克陶县| 溧阳市| 钟祥市| 梧州市| 涟源市| 宜章县| 上蔡县| 鹤峰县| 中山市| 三穗县| 蒲江县| 鲁山县| 肇源县| 西吉县| 华蓥市| 赤壁市| 曲沃县| 德钦县| 桦川县| 泸定县| 霍邱县| 新营市| 冕宁县| 时尚| 临颍县| 白沙| 大庆市| 三门峡市| 拉萨市| 奈曼旗| 宁都县| 宜兴市| 张家口市| 弋阳县| 南昌县|