javasocket实现SMTP协议发送邮件_第1页
javasocket实现SMTP协议发送邮件_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 / 9java socket 实现 SMTP 协议发送邮件 文章分类:Java 编程package com.socket.test;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import .Socket;import .UnknownHostException;import ernal.impl.dv.util.Base64; /*

2、通过 socket 向 smtp 协议服务器发送邮件* author fuyanqing*/public class SocketMail String mailServer;String from;String to;String content;String lineFeet = rn;private int port = 25;Socket client;BufferedReader in;DataOutputStream os;public String getContent() return content;public void setContent(String content)

3、 this.content = content;public String getMailServer() return mailServer;public void setMailServer(String mailServer) this.mailServer = mailServer;public String getFrom() return from;public void setFrom(String from) this.from = from;public String getTo() return to;public void setTo(String to) this.to

4、 = to;/*2 / 9* 初始化连接* return*/private boolean init() boolean boo = true;if(mailServer=null | .equals(mailServer)return false;try client = new Socket(mailServer,port);in = new BufferedReader(new InputStreamReader(client.getInputStream();os = new DataOutputStream(client.getOutputStream();String isConn

5、ect = response(); if(isConnect.startsWith(220)elseSystem.out.println( 建立连接失败: +isConnect);boo = false; catch (UnknownHostException e) System.out.println( 建立连接失败! );e.printStackTrace();boo = false; catch (IOException e) System.out.println( 读取流失败! ); e.printStackTrace();boo = false;return boo;/* 发送 sm

6、tp 指令* 并返回服务器响应信息3 / 9*/private String sendCommand(String msg) String result = null;try os.writeBytes(msg); os.flush();result = response(); catch (IOException e) e.printStackTrace();return result;/* 读取服务器端响应信息* return*/private String response()String result = null;try result = in.readLine(); catch (

7、IOException e) e.printStackTrace();return result;/* 关闭*/ private void close() try os.close(); in.close();client.close(); catch (IOException e) e.printStackTrace(); /* 发送邮件* return*/ public boolean sendMail()/ 初始化if(client=null)if(init() else return false;/ 判断 from,toif(from=null | from.isEmpty() | t

8、o = null | to.isEmpty() return false;/ 进行握手String result = sendCommand(HELO +mailServer+lineFeet);if(isStartWith(result,250)elseSystem.out.println( 握手失败: +result); return false;/ 验证发信人信息String auth = sendCommand(AUTH LOGIN+lineFeet); if(isStartWith(auth,334)else return false;String user = sendComman

9、d(new String(Base64.encode(*.getBytes()+lineFeet);if(isStartWith(user,334)4 / 9else return false;String pass = sendCommand(new String(Base64.encode(*.getBytes()+lineFeet);if(isStartWith(pass,235)else return false;/ 发送指令String f = sendCommand(Mail From:+lineFeet); if(isStartWith(f,250)elsereturn fals

10、e;String toStr = sendCommand(RCPT TO:+lineFeet);if(isStartWith(toStr,250)5 / 9elsereturn false;String data = sendCommand(DATA+lineFeet); if(isStartWith(data,354)elsereturn false;StringBuilder sb = new StringBuilder(); sb.append(From:+lineFeet);sb.append(To:+lineFeet); sb.append(Subject:test+lineFeet

11、); sb.append(Date:2010/10/27 17:30+lineFeet); sb.append(Content-Type:text/plain;charset=GB2312+lineFeet);sb.append(lineFeet);sb.append(content); sb.append(lineFeet+.+lineFeet);String conStr = sendCommand(sb.toString(); if(isStartWith(conStr,250)elsereturn false;/quitString quit = sendCommand(QUIT+li

12、neFeet); if(isStartWith(quit,221)elsereturn false;close();return true;private boolean isStartWith(String res,String with)return res.startsWith(with);public static void main(String args) SocketMail mail = new SocketMail();mail.setMailServer(); mail.setFrom(*); mail.setTo(*);mail.setContent(hello,this

13、 is a test mail!);boolean boo = mail.sendMail(); if(boo)System.out.println( 邮件发送成功! ); elseSystem.out.println( 邮件发送失败! );SMT 啲连接和收发过程:a. 建立 TCP 连接。b. 客户端发送 HELO 命令以标识发件人自己的身份,然后客户端发送 MAIL 命令服 务器端正希望以 OKf 乍为响应,表明准备接收。c. 客户端发送 RCPT 命令,以标识该电子邮件的计划接收人,可以有多个RCPT6 / 9行d. 协商结束,发送邮件,用命令 DATA 发送e. 以 . 表示结束输入内容一起发送出去f. 结束此次发送,用 QUIT 命令退出。SMTP 勺基本命令集:HELO 向服务器标识用户身份MAIL 初始化邮件传输 mail from: RCPT标识单个的邮件接收人;常在 MAIL 命令后面可有多个 rcpt to: DATA在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,初始化数据传输,以 . 结束。NOOP 无操乍,服务器应响应 OKRSET重置会话,当前传

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论