telnet与java socket发送简单文本文件

来源:互联网 发布:mac系统显示隐藏文件夹 编辑:程序博客网 时间:2024/05/18 02:44
telnet发邮件
telnet smtp.163.com 25  //连接邮箱服务器
EHLO test  //打招呼 ehlo后面内容随便
AUTH LOGIN //进行认证
MTIwMDAzODA4212 //base64编码后的用户名(不包括 @qq.com)
MTM5Nzk1ODQ4MzM21= //base64编码后的密码
MAIL FROM:<120003808@163.com> //邮件发送者
RCPT TO:<120003808@163.com>  //邮件接收者
DATA //发送正文
From: 120003808@163.com //邮件头 邮件显示时发送人的邮箱 可以不按真实的输入
To: 120003808@163.com  //邮件头 邮件显示时接收人  可以不按真实的输入
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: 发送测试  //邮件主题
Content-Type:text/html //内容类型
Content-Transfer-Encoding:utf-8 //编码方式
MIME-Version: 1.0 //MIME版本
          //回车换行 表示邮件头结束
这是一个发送html格式邮件测试  <a href="http://www.sina.com.cn">新浪</a>
.     //"."表示邮件结束标志
QUIT  //断开连接

socket发送简单文本邮件
public class MailSend {
    private static String smtpServer = "smtp.163.com"; //邮箱服务器
    private int port = 25; //邮箱服务器端口
    private static String email = "120003808@163.com";
    public static void main(String[] args) {
        String from = email;
        String to   = email;
        new MailSend().sendMail(from,to);
    }
    
    private void sendMail(String from,String to) {
        Socket socket = null;
        try {
            socket = new Socket(smtpServer,port);//连接到邮箱服务器
            BufferedReader br = getReader(socket);//得到输入流
            PrintWriter pw = getPrintWriter(socket);//得到输出流
            
            sendAndReceiver(null,br,pw);//仅仅为查看接收服务端响应数据
            sendAndReceiver("ehlo "+"test",br,pw);//打招呼,后面接任意字符
            sendAndReceiver("auth login",br,pw);//用户认证
            String username = new BASE64Encoder().encode("120003808".getBytes());//base64编码用户名
            String password = new BASE64Encoder().encode("13979584833".getBytes());//base64编码密码
            sendAndReceiver(username,br,pw);//发送base64编码后的用户名,不包括@163.com
            sendAndReceiver(password,br,pw);//发送base64编码后的密码
            
            sendAndReceiver("mail from:<"+from+">",br,pw);//说明邮件来自哪里,不一定为邮件地址,不过最好还是写成正确的email地址
            sendAndReceiver("rcpt to:<"+to+">",br,pw);//说明邮件发送到哪里,一定要为正确的email地址
            sendAndReceiver("data",br,pw);//发送的正文 结束标志: "回车"+"."+"回车"
            sendAndReceiver("from:120003808@163.com",br,pw);//邮件头 发送人
            sendAndReceiver("to:120003808@163.com",br,pw);//邮件头 接收人
            sendAndReceiver("subject:mail test中文",br,pw);//邮件头 邮件主题
            sendAndReceiver("date:"+new Date(),br,pw);//邮件头 发送时间
            sendAndReceiver("Content-Type:text/html",br,pw);//邮件头 内容类型  此内容类型为html
            sendAndReceiver("Content-Transfer-Encoding:utf-8",br,pw);//邮件头 编码方式
            pw.println("MIME-Version: 1.0");//邮件头 MIME版本
            pw.println();//邮件头结束
            pw.println("<a href='http://www.sina.com.cn'>新浪</a>");
            pw.println("发送html格式邮箱测试");//邮件体 正文内容
            pw.println(".");//结束标志
            sendAndReceiver("QUIT",br,pw);//quit断开连接
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private void sendAndReceiver(String str, BufferedReader br, PrintWriter pw)throws IOException {
        if(str!=null){
            System.out.println("client>"+str);
            pw.println(str);
        }
        String response = null;
        if((response=br.readLine())!=null){
            System.out.println("server>"+response);
        }
    }
    
    private PrintWriter getPrintWriter(Socket socket) {
        OutputStream os = null;
        try {
            os = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        PrintWriter pw = new PrintWriter(os,true);//自动刷新缓冲区
        return pw;
    }
    
    private BufferedReader getReader(Socket socket) {
        InputStream is = null;
        try {
            is = socket.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        return br;
    }
}