﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-花痴无极限，凉粉Forever-随笔分类-JavaSE</title><link>http://www.blogjava.net/dearwolf/category/15325.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 12:23:20 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 12:23:20 GMT</pubDate><ttl>60</ttl><item><title>Socket收发邮件--SMTP和POP3</title><link>http://www.blogjava.net/dearwolf/archive/2006/09/18/70300.html</link><dc:creator> 小小凉粉</dc:creator><author> 小小凉粉</author><pubDate>Mon, 18 Sep 2006 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/dearwolf/archive/2006/09/18/70300.html</guid><wfw:comment>http://www.blogjava.net/dearwolf/comments/70300.html</wfw:comment><comments>http://www.blogjava.net/dearwolf/archive/2006/09/18/70300.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/dearwolf/comments/commentRss/70300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dearwolf/services/trackbacks/70300.html</trackback:ping><description><![CDATA[
		<strong>SMTP的连接和收发过程</strong>：<br /><br />a.建立TCP连接。<br />b.客户端发送HELO命令以标识发件人自己的身份，然后客户端发送MAIL命令服务器端正希望以OK作为响应，表明准备接收。<br />c.客户端发送RCPT命令，以标识该电子邮件的计划接收人，可以有多个RCPT行<br />d.协商结束，发送邮件，用命令DATA发送<br />e.以.表示结束输入内容一起发送出去<br />f.结束此次发送，用QUIT命令退出。<br /><br /><strong>SMTP的基本命令集</strong>：<br /><br />HELO　　 向服务器标识用户身份<br />MAIL　　　初始化邮件传输mail from: <xxx><br />RCPT　　　标识单个的邮件接收人；常在MAIL命令后面可有多个rcpt to: <xxx><br />DATA　　　在单个或多个RCPT命令后，表示所有的邮件接收人已标识，初始化数据传输，以.结束。<br />NOOP　　 无操作，服务器应响应OK<br />RSET　　　重置会话，当前传输被取消<br />QUIT　　　结束会话<br /><br /><br /><strong>POP3简介</strong>：<br /><br />在POP3协议中有三种状态，认可状态，处理状态，和更新状态。当客户机与服务器建立联系时，一旦客户机提供了自己身份并成功确认，即由认可状态转入处理状态，在完成相应的操作后客户机发出quit命令，则进入更新状态，更新之后最后重返认可状态。<br /><br /><strong>POP3基本命令集</strong>：<br />USER　username<br />PASS　password　　　<br />STAT　 请求服务器发回关于邮箱的统计资料，如邮件总数和总字节数<br />LIST　 返回邮件数量和每个邮件的大小<br />RETR [Msg#]　返回由参数标识的邮件的全部文本<br />DELE　[Msg#]　服务器将由参数标识的邮件标记为删除，由quit命令执行<br />RSET　服务器将重置所有标记为删除的邮件，用于撤消DELE命令<br />NOOP 服务器返回一个肯定的响应<br />QUIT　更新<br /><br /><br />class POP3Demo {<br />   private static String POP3Server = "pop.126.com";<br />    private static String USERNAME = "username";//实际应用中改成真实的用户名<br />    private static String PASSWORD = "password";//实际应用中改成真实的密码<br />    public static void main(String[] args) {<br />        int POP3Port = 110;<br />        Socket client = null;<br />        try {<br />            // 向POP3服务程序建立一个套接字连接。<br />            client = new Socket(POP3Demo.POP3Server, POP3Port);<br />            // 创建一个BufferedReader对象，以便从套接字读取输出。<br />            InputStream is = client.getInputStream();<br />            BufferedReader sockin = new BufferedReader(new InputStreamReader(is));<br />            // 创建一个PrintWriter对象，以便向套接字写入内容。<br />            OutputStream os = client.getOutputStream();<br />            PrintWriter sockout = new PrintWriter(os, true);<br />            // 显示同SMTP服务程序的握手过程。<br />            System.out.println("S:" + sockin.readLine());<br />            sockout.println("user " + POP3Demo.USERNAME);<br />            System.out.println("S:" + sockin.readLine());<br />            sockout.println("pass " + POP3Demo.PASSWORD);<br />            System.out.println("S:" + sockin.readLine());<br />            sockout.println("stat");<br />            String temp[] = sockin.readLine().split(" ");<br />            int count = Integer.parseInt(temp[1]);//得到信箱中共有多少封邮件<br />            for (int i = 1; i &lt; count + 1; i++) {//依次打印出邮件的内容<br />                sockout.println("retr " + i);<br />                System.out.println("以下为第" + i + "封邮件的内容");<br />                while (true) {<br />                    String reply = sockin.readLine();<br />                    System.out.println(reply);<br />                    if (reply.toLowerCase().equals(".")) {<br />                        break;<br />                    }<br />                }<br />            } 
<p></p><p>        } catch (IOException e) {<br />            System.out.println(e.toString());<br />        } finally {<br />            try {<br />                if (client != null) {<br />                    client.close();<br />                }<br />            } catch (IOException e) {}<br />        }<br />    }<br />} </p><p> class SMTPDemo {<br />    //以下三项请在使用时改成真实的信箱地址<br />    //并且注意，SMTPServer和receiver必须是同一个服务器<br />    private static String sender = "sender";<br />    private static String receiver = "receiver";<br />    private static String SMTPServer = "smtpserver";<br />    public static void main(String[] args) {<br />        int SMTPPort = 25;<br />        Socket client = null;<br />        try {<br />            // 向SMTP服务程序建立一个套接字连接。<br />            client = new Socket(SMTPDemo.SMTPServer, SMTPPort);<br />            // 创建一个BufferedReader对象，以便从套接字读取输出。<br />            InputStream is = client.getInputStream();<br />            BufferedReader sockin = new BufferedReader(new InputStreamReader(is));<br />            // 创建一个PrintWriter对象，以便向套接字写入内容。<br />            OutputStream os = client.getOutputStream();<br />            PrintWriter sockout = new PrintWriter(os, true);<br />            // 显示同SMTP服务程序的握手过程。<br />            System.out.println("S:" + sockin.readLine());<br />            sockout.println("helo");<br />            System.out.println("S:" + sockin.readLine());<br />            sockout.println("mail from: " + "&lt;" + SMTPDemo.sender + "&gt;");<br />            System.out.println("S:" + sockin.readLine());<br />            sockout.println("rcpt to: " + "&lt;" + SMTPDemo.receiver + "&gt;");<br />            System.out.println("S:" + sockin.readLine());<br />            sockout.println("data");<br />            //发送邮件标题<br />            sockout.println("subject: 你好");<br />            //发送邮件内容<br />            sockout.println("ni hao");<br />            sockout.println("wo shi li jian");<br />            //此处的.为特殊标记，表示邮件结束<br />            sockout.println(".");<br />            sockout.println("rset");<br />            sockout.println("quit");<br />        } catch (IOException e) {<br />            System.out.println(e.toString());<br />        } finally {<br />            try {<br />                if (client != null) {<br />                    client.close();<br />                }<br />            } catch (IOException e) {}<br />        }<br />    }<br />}</p><br /></xxx></xxx><img src ="http://www.blogjava.net/dearwolf/aggbug/70300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dearwolf/" target="_blank"> 小小凉粉</a> 2006-09-18 15:11 <a href="http://www.blogjava.net/dearwolf/archive/2006/09/18/70300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>