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. NDK以及C语言基础语法(二)

    一.字符串类:(属于类类型) -String (在C++中才有) 使用之前必学引入String 类型: 引入String头文件(系统的头文件): #include <string>   p ...

  2. Java 基础系列之volatile变量(一)

    一.锁 两种特性:互斥性(mutual exclusion).可见性(visibility).原子性(atomic) 互斥性就是一次只有一个线程可以访问该共享数据,可见性就是释放锁之前,对共享数据的修 ...

  3. Netty Bootstrap(图解)|秒懂

    目录 Netty Bootstrap(图解) 源码工程 写在前面 图解几个重要概念 父子 channel EventLoop 线程与线程组 通道与Reactor线程组 Channel 通道的类型 启动 ...

  4. JavaScript 如何创建search字段

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Versions 崩溃(Mac升级OS X Yonsemite 10.10)

    今天兴冲冲的升级到了OS X Yonsemite 10.10,结果发现SVN工具不能用了,于是找到一个暂时的解决的方法 1.打开目录~/.subversion/servers 2.在[global] ...

  6. reduce python 的用法

    1.查看reduce 的用法 在python 命令查看 import functools help(functools) help(functools.reduce) 或者 from functool ...

  7. Error: Failed to fetch plugin E:_My_File______workMyCodemyCodecordova-workspaceplugman-testMyMath via registry. Probably this is either a connection problem, or plugin spec is incorrect.

    $ cordova plugin add E:\_My_File_____\_work\MyCode\myCode\cordova-workspace\plugman-test\MyMath --sa ...

  8. android MVP模式思考

    在软件开发设计中,有多种软件设计模式,如web开发中经典的MVC, 将后台分为三层:Model层,View层和Controller层,其中,Model主要是数据处理,如数据库,文件,或网络数据等:Vi ...

  9. iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

  10. P3231 [HNOI2013]消毒

    P3231 [HNOI2013]消毒 二维覆盖我们已经很熟悉了 扩展到三维,枚举其中较小的一维,这里定义为$a$ 以$a$为关键字状压,$1$表示该面全选 剩下的面和二维覆盖一样二分图匹配 如果还没接 ...