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. python 基础 6.1 异常处理方法

      一. Excepthion 异常类    Excepthion 是所有的异常基础类(),对于python 的标准异常,我们列出如下,以做参考:   异常名称                     ...

  2. 我的Android进阶之旅------>Android检测wifi连接状态

    今天要实现监听系统Wifi连接状态,下面代码简化后提取出来的,以备后用. step1. 编写BroadcastReceiver import android.content.BroadcastRece ...

  3. 销售订单增强字段 bapi更新

    如果增强字段在销售订单抬头(vbak)上,则要将增强字段一并append到如下四个表/结构中: VBAKKOZ VBAKKOZX BAPE_VBAK BAPE_VBAKX 在行项目(vbap)上: V ...

  4. 【zabbix】自动注册,实现自动发现agent并添加监控(agent不需要任何配置)

    更新: 后来在实际使用中发现,与其使用zabbix自动注册,不如直接调用zabbix的api主动发起添加服务器的请求,这样就不需要在zabbixserver上配置host信息了.实现全自动.具体调用方 ...

  5. (linux)BSP(板上支持包)概述

    1. BSP概述 BSP即Board Support Package,板级支持包. 它来源于嵌入式操作系统与硬件无关的设计思想,操作系统被设计为运行在虚拟的硬件平台上. 对于具体的硬件平台,与硬件相关 ...

  6. Android Weekly Notes Issue #310 (Google IO特别篇)

    Android Weekly Issue #310 May 20th, 2018 Android Weekly Issue #290 本期既有本次Google IO对于Play Console的更新简 ...

  7. Android4.4 GPS框架分析【转】

    本文转载自:http://blog.csdn.net/junzhang1122/article/details/46674569 GPS HAL层代码在目录trunk/Android/hardware ...

  8. c# wpf ComboBox 动态下拉框 及 动态默认值设定

    1.下拉框声明 <ComboBox x:Name="DirComboBox" Width="150" Height="18" Marg ...

  9. Java里的阻塞队列

    JDK7提供了7个阻塞队列,如下: ArrayBlockingQueue  : 一个数组结构组成的有界阻塞队列. LinkedBlockingQueue : 一个由链表结构组成的有界阻塞队列 . Pr ...

  10. javascript(7)

    js中基于对象==js面向对象 js中没有类class,但是它 JavaScript是一种面向(基于)对象的动态脚本语言,是一种基于对象和事件驱动并具有安全性能的脚本语言.它具有面向对象语言所特有的各 ...