您的位置:首页技术开发java教程 → JAVA编写ESMTP客户端发送邮件代码

JAVA编写ESMTP客户端发送邮件代码

时间:2011/2/11 17:41:18来源:本站原创作者:佚名我要评论(0)

 由SOHU向网易发邮件

1、效果

 2、代码

import java.io.*;
import java.net.*;
public class Smtptest {
public static void main(String[] args) {
  // TODO Auto-generated method stub
  Socket smtpclient=null;
  DataOutputStream os=null;
  BufferedReader is=null;
    String answer=null;
try{       
         smtpclient=new Socket("smtp.sohu.com",25);
         is=new BufferedReader(new InputStreamReader(smtpclient.getInputStream()));
         os=new DataOutputStream(smtpclient.getOutputStream());        
        }
        catch(UnknownHostException ue){
         System.err.println("未知主机");
        }
        catch(IOException io){
         System.err.println("I/O错误");
        }
        try{
         System.out.println("正在登录邮箱服务器....");
         os.writeBytes("EHLO localhost\r\n"); 
            while ((answer=is.readLine())!=null){
             System.out.println("Server:"+answer);
             if (answer.indexOf("220")!=-1){
              break;
             }
            }  
         System.out.println("正在检测邮箱支持的服务....");          
         os.writeBytes("AUTH LOGIN\r\n"); 
            while ((answer=is.readLine())!=null){
             if (answer.indexOf("250")==-1){
              break;
             }            
             System.out.println("Server:"+answer);
            }
         System.out.println("正在验证用户名和密码....");               
         System.out.println("Server:"+answer); 
         os.writeBytes("bmhzb2Z0\r\n");//用户名的BASE64值
         os.writeBytes("********\r\n");//密码的BASE64值,这里用*代替
            while ((answer=is.readLine())!=null){
             System.out.println("Server:"+answer);
             if (answer.indexOf("235")!=-1){
                 System.out.println("验证成功");
                 break;
             }
             else if (answer.indexOf("334")==-1) {
                 System.out.println("验证失败"); 
                    os.close();
                    is.close();
                    smtpclient.close(); 
                    System.exit(0);
             }
            }        
         System.out.println("开始发送邮件....");           
         os.writeBytes("MAIL From: < nhsoft@sohu.com >\r\n");  
         os.writeBytes("RCPT To: < nhsoft@sohu.com >\r\n");
         os.writeBytes("RCPT To: < nhsoft@126.com >\r\n");         
     os.writeBytes("DATA\r\n");
            while ((answer=is.readLine())!=null){
             if (answer.indexOf("354")!=-1){
              break;
             }            
             System.out.println("Server:"+answer);
            }
         System.out.println("Server:"+answer);            
         System.out.println("正在发送邮件内容....");
         os.writeBytes("From: nhsoft@sohu.com\r\n");
            os.writeBytes("To: nhsoft@126.com,nhsoft@sohu.com\r\n");
            os.writeBytes("Subject: test mail-21\r\n");
            os.writeBytes("Content-Type: text/html\r\n");        
            os.writeBytes("This is a test-21 mail, you don't reply it.\r\n\r\n");
         os.writeBytes("\r\n.\r\n");
            while ((answer=is.readLine())!=null){
             System.out.println("Server:"+answer);
             if (answer.indexOf("250")!=-1){
              break;
             }            
            }
            os.writeBytes("QUIT\r\n");
            while ((answer=is.readLine())!=null){
             System.out.println("Server:"+answer);
             if (answer.indexOf("221")!=-1){
                 System.out.println("邮件发送成功,退出邮箱!");              
              break;
             }            
            }
          
            os.close();
            is.close();
            smtpclient.close();          
        }
        catch(UnknownHostException ue){
         System.err.println("无法连接主机");
        }
        catch(IOException io){
         System.err.println("发送I/O错误");
        }

 }

}
3、执行情况:

正在登录邮箱服务器....

 Server:220 smtp.sohu.com ESMTP Postfix

 正在检测邮箱支持的服务....

 Server:250-smtp.sohu.com

 Server:250-PIPELINING

 Server:250-SIZE 10240000

 Server:250-VRFY

 Server:250-ETRN

 Server:250-AUTH LOGIN

 Server:250-ENHANCEDSTATUSCODES

 Server:250-8BITMIME

 server:250 DSN

 正在验证用户名和密码....

 Server:334 VXNlcm5hbWU6

Server:334 UGFzc3dvcmQ6

 Server:235 2.0.0 Authentication successful

 验证成功

 开始发送邮件....

 Server:354 Send from Rising mail proxy

 正在发送邮件内容....

 Server:250

 Server:250 2.1.5 Ok

 Server:354 End data with <CR><LF>.<CR><LF>

 Server:250 2.0.0 Ok: queued as 74169608241

 Server:221 2.0.0 Bye

 邮件发送成功,退出邮箱!

相关视频

    没有数据

相关阅读 jdk不是有效的win32程序怎么办 jdk不是有效的win32程序解决方法java设置cookie教程 java怎么设置cookiejava怎么设置随机数 java设置随机数详细教程java怎么设置光标位置 java设置光标位置教程如何在Mac上清除Java高速缓存?如何在Mac上卸载Java?Mac上怎么卸载Java?OSX 10.11 java 6不兼容问题解决办法如何为Mac更新Java?java mac版更新教程

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 myeclipse如何安装插件myeclipse怎么显示代码 myeclipse怎么连接到数据库 myeclipse连接到eclipse没有maven选项怎么办 eclipse没有majava设置cookie教程 java怎么设置cookiejava怎么设置随机数 java设置随机数详细教程

人气排行 java.lang.NullPointerException错误处理方eclipse没有maven选项怎么办 eclipse没有majava环境变量配置方法java中String类主要方法的使用java中创建并初始化字符串方法MyEclipse的注册以及汉化方法图解myeclipse如何安装插件 myeclipse安装插件方一个简单Java发邮件源代码