package com.skyzoo.Jutil;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintStream;

import java.net.Socket;

import java.util.Vector;

public class Jpop3 {

// 用户名

private String username = "";

// 密码

private String password = "";

// Pop服务器名

private String pop3Host = "";

// 设置标志位

public Vector recvMails = new Vector();

private boolean delete = true;

private boolean secure = false;

public void setPop3Host(String pop3Host) throws Exception
{

this.pop3Host = pop3Host.trim();

};

public void setUser(String username, String password) throws
Exception {

this.username = username.trim();

this.password = password.trim();

};

private void log(String log) {

System.out.println(log);

}

public void setDelete(boolean delete) {

this.delete = delete;

}

public static void main(String argv[]) {

Jpop3 jpop3 = new Jpop3();

try {

jpop3.setPop3Host("pop.ym.163.com");

jpop3.setUser("saicmotor@mynms.cn", "abcd1234");

jpop3.setDelete(false);

jpop3.recvin();

} catch (Exception e) {

e.printStackTrace();

}

}

public boolean recvin() {

BufferedReader in; // 从套接字中读取文本

PrintStream out; // 将文本写入套接字

Socket s;

String line;

String numberMessages;

try {

if (pop3Host.equals("")) {

return false;

}

if (username.equals("")) {

return false;

}

log("Connecting to " + pop3Host + " ...");

// Pop3服务默认使用110端口

// 建立TCP连接

s = new Socket(pop3Host, 110);

log("Connected\nAuthentication in progress...");

// 连接建立成功,获得关联的输入流和输出流

in = new BufferedReader(new
InputStreamReader(s.getInputStream()));

out = new PrintStream(s.getOutputStream());

// 着一行响应是服务器的欢迎信息,可抛弃

line = readFromInputStream(in);

// 发送用户名

printToOutputStream(out, "USER " + username);

// 如果用户不存在,则响应信息开头有+OK字样。否则退出

if (!readFromInputStream(in).startsWith("+OK")) {

log("Wrong user name, disconnecting");

s.close();

return false;

}

// 用户名存在,则发送密码

out.println("PASS " + password);

log("R: PASS ********");

// 读服务器响应信息

line = readFromInputStream(in);

// 如果密码核对成功,响应信息中开头+OK字样

if (!line.startsWith("+OK")) {

// 密码不正确,无法继续

log("Wrong password, disconnecting");

s.close();

return false;

}

// 命令STAT

printToOutputStream(out, "STAT");

// 读取响应

line = readFromInputStream(in);

if (!line.startsWith("+OK")) {

// 如果命令执行失败,则退出

System.out.println("Error:" + line);

s.close();

return false;

}

// 从统计信息中抽取消息个数

int i = line.lastIndexOf(' ');

numberMessages = line.substring(4, i);

log("You have " + numberMessages + " message(s) in your
mailbox");

// 获取消息个数

int n = Integer.parseInt(numberMessages);

int numberBytes;

// 取出服务器上的每一个消息

for (int msg = 1; msg <= n; msg++) {

mail_t one_mail = new mail_t();

log("Retreaving message " + msg);

// 命令RETR 用于收取消息

printToOutputStream(out, "RETR " + msg);

// 从服务器读取消息

line = readFromInputStream(in);

if (!line.startsWith("+OK")) {

System.out.println("Error: " + line);

s.close();

return false;

}

// 消息已“.”号结束,一行中连续两个"."代表"."

log(line);

line = "";

log("**************---------------------------");

line = in.readLine();

while (line.compareTo(".") != 0) {

if (line.compareTo("..") == 0)

log(".");

else {

log(line);

processLine(one_mail, line);

log("---------------------------**************");

}

// 读取下一行

line = in.readLine();

}

// 消息已读取到本地,从服务器删除消息

// 删除消息的命令是DELE [messagenumber]

if (this.delete == true) {

printToOutputStream(out, "DELE " + msg);

readFromInputStream(in);

}

one_mail.echo();

recvMails.add(one_mail);

}

// 准备退出,使用QUIT命令

printToOutputStream(out, "QUIT");

readFromInputStream(in);

// 关闭套接字

s.close();

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return true;

}

void processLine(mail_t one_mail, String line) {

line = line.trim();

if (line.startsWith("Received:")) {

one_mail.Received = line.substring(9).trim();

} else if (line.startsWith("Date:")) {

one_mail.Date = line.substring(5).trim();

} else if (line.startsWith("From:")) {

one_mail.From = line.substring(5).trim();

} else if (line.startsWith("To:")) {

one_mail.To = line.substring(3).trim();

} else if (line.startsWith("Message-ID:")) {

} else if (line.startsWith("Subject:")) {

one_mail.Subject = line.substring(8).trim();

} else if (line.startsWith("MIME-Version:")) {

} else if (line.startsWith("Content-Type:")) {

}

}

// 方法printToOutputStream()向SMTP服务器发送命令

void printToOutputStream(PrintStream out, String s) throws
IOException {

log("S : " + s);

out.println(s);

return;

}

// 方法readFromInputStream()接收从SMTP服务器发回的响应信息

String readFromInputStream(BufferedReader in) throws
IOException {

String s = in.readLine();

if (s != null)

log("R :" + s);

return s;

}

public boolean isContainSubject(String subject){

for(int i=0;i

if(this.recvMails.get(i).Subject.equals(subject)){

return true;

}

}

return false;

}

}

class mail_t {

String Received = "";

String Date = "";

String From = "";

String To = "";

String Subject = "";

String Text = "";

String Html = "";

String all = "";

public void echo() {

String line = "";

line += "Received==='" + Received + "'\n";

line += "Date==='" + Date + "'\n";

line += "From==='" + From + "'\n";

line += "To==='" + To + "'\n";

line += "Subject==='" + Subject + "'\n";

System.out.println(line);

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

java&nbsp;POP3的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. Java邮件服务学习之二:SMTP和POP3

    一.SMTP SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则.SMTP协议属于TCP/IP协议簇,它帮助每台计算 ...

  3. Java资源大全中文版(Awesome最新版)

    Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...

  4. java中使用javamail发送邮件

    1. 电子邮件协议 电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP. 其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMT ...

  5. Java 发送邮件

    使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) . 你可以在 JavaMail ...

  6. java发送邮件..转

    使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) . 你可以在 JavaMail ...

  7. SSH实战 · JAVA发送邮件相关

    发送激活邮件 电子邮箱:邮件服务器上的一块空间: 邮件服务器:类比于web服务器(tomcat),有相应的服务器软件: 邮件协议:大公司发送和接收服务器分开,也可以都用一个服务器.           ...

  8. Java邮件发送与接收原理

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

  9. Java的几种常用设计模式

    何为设计模式? 就是对一些常见问题进行归纳总结,并针对具体问题给出一套通用的解决办法(强调的是解决问题的思想): 在开发中,只要遇到这类问题,就可以直接使用这些设计模式解决问题. ---------- ...

随机推荐

  1. JS基础常识理解

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. tcp/ip (网络通讯协议)

    介绍 TCP: 传输控制协议, IP: 网际协议, TCP/IP: 供已连接互联网的计算机之间进行通信的通信协议 在tcp/ip内部 , 包含一系列处理数据通信的协议: tcp.udp.icmp.dh ...

  3. 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)

    这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...

  4. 已知段地址,求CPU寻址范围

    已知段地址为0001H,仅通过变化偏移地址寻址,则CPU的寻址范围是? 物理地址 = 段地址×16 + 偏移地址 所以物理地址的范围是[16×1H+0H, 16×1H+FFFFH] 也就是[10H×1 ...

  5. 我的Android进阶之旅------>Android中MediaButtonReceiver广播监听器的机制分析

    今天看公司的一段关于MediaButtonReceiver的代码看的比较混乱,幸好看了下面的这篇文章,才能茅塞顿开的理解好代码.在此转载下来,以备以后理解,希望都到这篇文章的人也能够有所帮助. 本文转 ...

  6. ios之编码规范具体说明

    iOS代码规范: 所有代码规范所有遵循苹果sdk的原则,不清楚的请訪问苹果SDK文档或下载官方Demo查看. 1.project部分: 将项目中每一个功能模块相应的源文件放入同一目录下,使用虚拟目录. ...

  7. 浅尝NODE.js

    Node.js是Google公司开发的,安装好必要的环境以后,可以在服务端上跑的js,可以接收和回应http请求,所有方法都支持异步回调,大大提高事务执行效率. 学习地址:http://www.run ...

  8. CUDA: 共享内存与同步

    CUDA C支持共享内存, 将CUDA C关键字__shared__添加到变量声明中,将使这个变量驻留在共享内存中.对在GPU上启动的每个线程块,CUDA C编译器都将创建该变量的一个副本.线程块中的 ...

  9. node版本管理工具 -- nvm安装与使用

    新老项目维护时node环境切换麻烦怎么办? 不用担心,有了nvm ,一个命令就能切换node版本. 首先需要安装nvm工具,进入下载地址. 下载之后安装nvm. nvm安装之后还需要配置两个环境变量( ...

  10. java--List判断是否为空

    list.isEmpty()和list.size()==0 没有区别 isEmpty()判断有没有元素,size()返回元素个数 如果判断一个集合有无元素,用isEmpty()方法. 这就相当与,你要 ...