youanyyou 发表于 2013-1-15 02:18:11

Java邮件收发SMTP和POP3实例详解

SMTP的连接和收发过程:
a.建立TCP连接。
b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。
c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行
d.协商结束,发送邮件,用命令DATA发送
e.以.表示结束输入内容一起发送出去
f.结束此次发送,用QUIT命令退出。
SMTP的基本命令集:
HELO 向服务器标识用户身份
MAIL 初始化邮件传输mail from:
RCPT 标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:
DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,初始化数据传输,以.结束。
NOOP 无操作,服务器应响应OK
RSET 重置会话,当前传输被取消
QUIT 结束会话
POP3简介:
在POP3协议中有三种状态,认可状态,处理状态,和更新状态。当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。
POP3基本命令集:
USER username
PASS password
STAT 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
LIST 返回邮件数量和每个邮件的大小
RETR 返回由参数标识的邮件的全部文本
DELE 服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET 服务器将重置所有标记为删除的邮件,用于撤消DELE命令
NOOP 服务器返回一个肯定的响应
QUIT 更新
 
class POP3Demo {    private static String POP3Server = "pop.126.com";   private static String USERNAME = "username";//实际应用中改成真实的用户名   private static String PASSWORD = "password";//实际应用中改成真实的密码   public static void main(String[] args) {         int POP3Port = 110;         Socket client = null;         try {             // 向POP3服务程序建立一个套接字连接。             client = new Socket(POP3Demo.POP3Server, POP3Port);             // 创建一个BufferedReader对象,以便从套接字读取输出。             InputStream is = client.getInputStream();             BufferedReader sockin = new BufferedReader(new InputStreamReader(is));             // 创建一个PrintWriter对象,以便向套接字写入内容。             OutputStream os = client.getOutputStream();             PrintWriter sockout = new PrintWriter(os, true);             // 显示同SMTP服务程序的握手过程。             System.out.println("S:" + sockin.readLine());             sockout.println("user " + POP3Demo.USERNAME);             System.out.println("S:" + sockin.readLine());             sockout.println("pass " + POP3Demo.PASSWORD);             System.out.println("S:" + sockin.readLine());             sockout.println("stat");             String temp[] = sockin.readLine().split(" ");             int count = Integer.parseInt(temp);//得到信箱中共有多少封邮件             for (int i = 1; i < count + 1; i++) {//依次打印出邮件的内容               sockout.println("retr " + i);               System.out.println("以下为第" + i + "封邮件的内容");               while (true) {                     String reply = sockin.readLine();                     System.out.println(reply);                     if (reply.toLowerCase().equals(".")) {                         break;                     }               }             }      } catch (IOException e) {             System.out.println(e.toString());         } finally {             try {               if (client != null) {                     client.close();               }             } catch (IOException e) {}         }   } }class SMTPDemo {   //以下三项请在使用时改成真实的信箱地址   //并且注意,SMTPServer和receiver必须是同一个服务器   private static String sender = "sender";   private static String receiver = "receiver";   private static String SMTPServer = "smtpserver";   public static void main(String[] args) {         int SMTPPort = 25;         Socket client = null;         try {             // 向SMTP服务程序建立一个套接字连接。             client = new Socket(SMTPDemo.SMTPServer, SMTPPort);             // 创建一个BufferedReader对象,以便从套接字读取输出。             InputStream is = client.getInputStream();             BufferedReader sockin = new BufferedReader(new InputStreamReader(is));             // 创建一个PrintWriter对象,以便向套接字写入内容。             OutputStream os = client.getOutputStream();             PrintWriter sockout = new PrintWriter(os, true);             // 显示同SMTP服务程序的握手过程。             System.out.println("S:" + sockin.readLine());             sockout.println("helo");             System.out.println("S:" + sockin.readLine());             sockout.println("mail from: " + "<" + SMTPDemo.sender + ">");             System.out.println("S:" + sockin.readLine());             sockout.println("rcpt to: " + "<" + SMTPDemo.receiver + ">");             System.out.println("S:" + sockin.readLine());             sockout.println("data");             //发送邮件标题             sockout.println("subject: 你好");             //发送邮件内容             sockout.println("ni hao");             sockout.println("wo shi li jian");             //此处的.为特殊标记,表示邮件结束             sockout.println(".");             sockout.println("rset");             sockout.println("quit");         } catch (IOException e) {             System.out.println(e.toString());         } finally {             try {               if (client != null) {                     client.close();               }             } catch (IOException e) {}         }   } } 
深圳人才网 深圳招聘网 深圳人才招聘网 深圳人才大市场 
企业、个人免费注册,获取想要的 深圳 软件工程师招聘信息 月薪最低3000-8000,更有高端猎头职位! 

<div style="line-height: normal;">www.szrcwz.com                                                                                                                                     
页: [1]
查看完整版本: Java邮件收发SMTP和POP3实例详解