| |
| java开发的邮件发送程序 |
| |
发布者: 发布时间:2007-09-23 |
|
|
|
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()<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){} } }
|
| (转载文章请保留出处:北天JAVA技术网(www.java114.com)) |
| |
| 更多精彩文章: |
| 通过套接字传递对象 |
| Java解析网络数据流的三种特殊方法 |
| 用Java编写通过代理访问的应用程序 |
| Java Socket网络编程初级入门 |
| a Socket编程中的一个秘密类 |
| 三步学会Java Socket编程 |
| |
| 最近评论: |
|
|
| 鍥炲 |
|
|
|
| 如果真的有来生! |
| 四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游,
max(9219) |
|
|
| 轻轻走过你的窗前! |
| world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold, max(6323) |
|
|
| 轻轻走过你的窗前! |
| world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(6266) |
|
|
| 不在的哪天! |
| final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,
max(2800) |
|
|
| 不在的哪天! |
| final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,
max(3607) |
|
|
| 不在的哪天! |
| final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,
max(548) |
|
|
| 快乐情人节! |
| wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap.
max(1382) |
|
|
| 快乐情人节! |
| wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap.
max(9823) |
|
|
| 快乐情人节! |
| wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap.
max(7494) |
|
|
| |
| 免责声明:该文章由网友发表,如果对您造成侵权,请联系站长。 |
|