




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、java 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 se
3、tContent(String content) 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
4、 void setTo(String to) this.to = to; /* * 初始化连接 * 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 DataOutp
5、utStream(client.getOutputStream(); String isConnect = response(); if(isConnect.startsWith("220") else System.out.println("建立连接失败:"+isConnect); boo = false; catch (UnknownHostException e) System.out.println("建立连接失败!"); e.printStackTrace(); boo = false; catch (IOException
6、 e) System.out.println("读取流失败!"); e.printStackTrace(); boo = false; return boo; /* * 发送smtp指令 * 并返回服务器响应信息 */ private String sendCommand(String msg) String result = null; try os.writeBytes(msg); os.flush(); result = response(); catch (IOException e) e.printStackTrace(); return result; /* *
7、 读取服务器端响应信息 * return */ private String response() String result = null; try result = in.readLine(); catch (IOException e) e.printStackTrace(); return result; /* * 关闭 */ private void close() try os.close(); in.close(); client.close(); catch (IOException e) e.printStackTrace(); /* * 发送邮件 * return */ p
8、ublic boolean sendMail() /初始化 if(client=null) if(init() else return false; /判断from,to if(from=null | from.isEmpty() | to = null | to.isEmpty() return false; /进行握手 String result = sendCommand("HELO "+mailServer+lineFeet); if(isStartWith(result,"250") else System.out.println("
9、握手失败:"+result); return false; /验证发信人信息 String auth = sendCommand("AUTH LOGIN"+lineFeet); if(isStartWith(auth,"334") else return false; String user = sendCommand(new String(Base64.encode("*".getBytes()+lineFeet); if(isStartWith(user,"334") else return fals
10、e; String pass = sendCommand(new String(Base64.encode("*".getBytes()+lineFeet); if(isStartWith(pass,"235") else return false; /发送指令 String f = sendCommand("Mail From:<"+from+">"+lineFeet); if(isStartWith(f,"250") else return false; String toStr
11、 = sendCommand("RCPT TO:<"+to+">"+lineFeet); if(isStartWith(toStr,"250") else return false; String data = sendCommand("DATA"+lineFeet); if(isStartWith(data,"354") else return false; StringBuilder sb = new StringBuilder(); sb.append("From:&
12、lt;"+from+">"+lineFeet); sb.append("To:<"+to+">"+lineFeet); sb.append("Subject:test"+lineFeet); sb.append("Date:2010/10/27 17:30"+lineFeet); sb.append("Content-Type:text/plain;charset="GB2312""+lineFeet); sb.append(l
13、ineFeet); sb.append(content); sb.append(lineFeet+"."+lineFeet); String conStr = sendCommand(sb.toString(); if(isStartWith(conStr,"250") else return false; /quit String quit = sendCommand("QUIT"+lineFeet); if(isStartWith(quit,"221") else return false; close();
14、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 is a test
15、mail!"); boolean boo = mail.sendMail(); if(boo) System.out.println("邮件发送成功!"); else System.out.println("邮件发送失败!"); ··························
16、3;·················································
17、3;··············SMTP的连接和收发过程:a.建立TCP连接。b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行d.协商结束,发送邮件,用命令DATA发送e.以.表示结束输入内容一起发送出去f.结束此次发送,用QUIT命令退出。SMTP的基本命令集:HELO 向服务器标识用户身份MAIL初始化邮
18、件传输mail from: <xxx>RCPT标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to: <xxx>DATA在单个或多个RCPT命令后,表示所有的邮件接收人已标识,初始化数据传输,以.结束。NOOP 无操作,服务器应响应OKRSET重置会话,当前传输被取消QUIT结束会话POP3简介:在POP3协议中有三种状态,认可状态,处理状态,和更新状态。当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。POP3基本命令集:USERus
19、ernamePASSpasswordSTAT 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数LIST 返回邮件数量和每个邮件的大小RETR Msg#返回由参数标识的邮件的全部文本DELEMsg#服务器将由参数标识的邮件标记为删除,由quit命令执行RSET服务器将重置所有标记为删除的邮件,用于撤消DELE命令NOOP 服务器返回一个肯定的响应QUIT更新class POP3Demo private static String POP3Server = "" private static String US
20、ERNAME = "username"/实际应用中改成真实的用户名 private static String PASSWORD = "password"/实际应用中改成真实的密码 public static void main(String args) int POP3Port = 110; Socket clie
21、nt = null; try / 向POP3服务程序建立一个套接字连接。 client = new Socket(POP3Demo.POP3Server, POP3Port); &
22、#160; / 创建一个BufferedReader对象,以便从套接字读取输出。 InputStream is = client.getInputStream(); BufferedReader sockin = new BufferedReader(new InputStreamRea
23、der(is); / 创建一个PrintWriter对象,以便向套接字写入内容。 OutputStream os = client.getOutputStream(); PrintWriter socko
24、ut = new PrintWriter(os, true); / 显示同SMTP服务程序的握手过程。 System.out.println("S:" + sockin.readLine();
25、160; sockout.println("user " + POP3Demo.USERNAME); System.out.println("S:" + sockin.readLine(); sockout.println("pass " + POP3Demo.PASSWOR
26、D); System.out.println("S:" + sockin.readLine(); sockout.println("stat"); String t
27、emp = sockin.readLine().split(" "); int count = Integer.parseInt(temp1);/得到信箱中共有多少封邮件 for (int i = 1; i < count + 1; i+) /依次打印出邮件的内容
28、; sockout.println("retr " + i); System.out.println("以下为第" + i + "封邮件的内容");
29、0; while (true) String reply = sockin.readLine();
30、0; System.out.println(reply); if (reply.toLowerCase().equals(".")
31、160; break;
32、; </xxx></xxx> catch (IOException e) System.out.println(e.toString(); finally
33、0; try if (client != null) client.close();
34、0; catch (IOException e) class SMTPDemo /以下三项请在使用时改成真实的信箱地址
35、60; /并且注意,SMTPServer和receiver必须是同一个服务器 private static String sender = "sender" private static String receiver = "receiver" private static String SMTPServer = "smtpserver" public static void ma
36、in(String args) int SMTPPort = 25; Socket client = null; try / 向SMTP服务程序建立一个套接字连接。
37、 client = new Socket(SMTPDemo.SMTPServer, SMTPPort); / 创建一个BufferedReader对象,以便从套接字读取输出。 InputStream is = client.getInputStream
38、(); BufferedReader sockin = new BufferedReader(new InputStreamReader(is); / 创建一个PrintWriter对象,以便向套接字写入内容。
39、60; OutputStream os = client.getOutputStream(); PrintWriter sockout = new PrintWriter(os, true); / 显示同SMTP服务程序的握手过程。
40、0; System.out.println("S:" + sockin.readLine(); sockout.println("helo"); System.out.println("S:" + sockin.readLine();
41、60; sockout.println("mail from: " + "<" + SMTPDemo.sender + ">"); System.out.println("S:" + sockin.readLine();
42、 sockout.println("rcpt to: " + "<" + SMTPDemo.receiver + ">"); System.out.println("S:" + sockin.readLine(); sockout.println("data"); /发送邮件标题 sockout.println("subject: 你好"); &
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年计算机二级C语言课程知识点试题及答案
- 2025年C语言整体复习试题及答案
- 计算机一级 Photoshop数字艺术试题及答案
- 逻辑思维与财务策略制定间的关系试题及答案
- 软件测试的质量提升策略试题及答案
- 嵌入式系统的开放平台试题及答案
- 教育培训收费合同协议书
- 计算机二级知识点回顾试题及答案
- 2025年嵌入式行业分析试题及答案
- C语言的优化策略探讨试题及答案
- 2025年液压马达开发行业深度研究报告
- 树木移栽施工协议书
- 手术前抗凝药停用时间
- 租地解除合同协议书
- 2025智能矿山暨无人驾驶行业蓝皮书-亿欧智库
- 2025湖北水发集团园招聘40人笔试参考题库附带答案详解
- 2025年人工智能应用技术考试试题及答案
- 2024北森图形推理题
- 2025年社区工作者考试试题及答案
- 2025年离婚协议范文下载8篇
- 金融投资公司商业计划书模板范文
评论
0/150
提交评论