Java使用Socket读写邮件服务器示例
来源:互联网 发布:爱逛街淘宝网首页 编辑:程序博客网 时间:2024/06/10 18:10
配置文件:
Main
- host=XXX.XX.XX.XX
- port=8888
- max_size=200
- min_size=30
- package com.wondersgroup.stjt.mail.util;
- import java.net.*;
- import java.io.IOException;
- /**
- *
- */
- public class SocketAdapter extends Socket{
- /**
- * 连接状态
- */
- private boolean status=true;
- /**
- * 默认的构造函数
- */
- public SocketAdapter() {
- super();
- }
- public SocketAdapter(String host,int port)throws UnknownHostException,IOException{
- super(host,port);
- }
- /**
- * 判断此连接是否空闲
- * @return boolean 空闲返回ture,否则false
- */
- public boolean isFree(){
- return status;
- }
- /**
- * 当使用此连接的时候设置状态为false(忙碌)
- */
- public void setBusy(){
- this.status=false;
- }
- /**
- * 当客户端关闭连接的时候状态设置为true(空闲)
- */
- @Override
- public void close()throws IOException{
- // System.out.println("Close : set the status is free ");
- status=true;
- super.close();
- }
- public void destroy() throws IOException{
- close();
- }
- }
- package com.wondersgroup.stjt.mail.util;
- import java.net.*;
- import java.util.*;
- import java.io.IOException;
- public interface
- ConnectionProvider {
- public static final String SERVER_IP ="host";
- public static final String SERVER_PORT = "port";
- public static final String MAX_SIZE = "max_size";
- public static final String MIN_SIZE = "min_size";
- /**
- *判断连接池内是否有连接
- * @return true 有连接返回true,否则返回false
- */
- public boolean isPooled();
- /**
- * 当此方法被调用的时候提供一个 socket
- * @see Socket
- * @return Socket a Connection object.
- */
- public SocketAdapter getConnection() throws java.net.SocketException;
- /**
- * 连接池初始化
- */
- public void init() throws UnknownHostException, IOException;
- /**
- * 连接池重新启动
- */
- public void restart() throws UnknownHostException, IOException;
- /**
- * 注销连接池
- */
- public void destroy() throws IOException;
- }
- package com.wondersgroup.stjt.mail.util;
- import java.util.*;
- import java.net.*;
- import java.io.IOException;
- /**
- *
- */
- public class MyConnectionProvider
- implements ConnectionProvider {
- private Properties pro = null;
- private static ConnectionProvider provider = null;
- private static Object object_lock = new Object();
- private static Object[] object_lock_list = new Object[Integer.parseInt(ResourceBundle.getBundle("mailsocket").getString("max_size"))];
- private String ip;
- private String port;
- private static InetSocketAddress inetSockAddr=null;
- /**
- * 默认的最大连接数
- */
- private int max_size = 20;
- /**
- * 默认的最小连接数 。。。没用
- */
- private int min_size = 10;
- /**
- * Socket connection
- */
- private SocketAdapter[] socketpool = null;
- /**
- * 构造对象的时候初始化连接池
- * @throws UnknownHostException
- * @throws IOException
- */
- private MyConnectionProvider() throws UnknownHostException,
- IOException {
- ResourceBundle res =ResourceBundle.getBundle("mailsocket");
- ip =res.getString(SERVER_IP);
- port = res.getString(SERVER_PORT);
- String max_size_s = res.getString(MAX_SIZE);
- String min_size_s = res.getString(MIN_SIZE);
- if (max_size_s != null) {
- max_size = Integer.parseInt(max_size_s);
- }
- if (min_size_s != null) {
- min_size = Integer.parseInt(min_size_s);
- }
- init(); //构造对象的时候初始化连接池
- }
- /**
- * 判断是否已经池化
- * @return boolean 如果池化返回ture,反之返回false
- */
- public boolean isPooled() {
- if (socketpool != null) {
- return true;
- }
- else return false;
- }
- /**
- *返回一个连接
- * @return a Connection object.
- * @throws IOException
- */
- public SocketAdapter getConnection() {
- SocketAdapter s = null;
- //System.out.println("loop");
- for (int i = 0; i < socketpool.length; i++) {
- //System.out.println("loop detail i="+i);
- if (socketpool[i] != null) {
- //如果有空闲的连接,返回一个空闲连接,如果没有,继续循环
- if(!socketpool[i].isFree()){
- continue;
- }else{
- synchronized (object_lock_list[i]){
- if (socketpool[i].isFree()) {
- s = socketpool[i];
- // System.out.println(i+" socket isConnected()="+s.isConnected()+" binding"+s.isBound());
- try {
- s=socketpool[i]=new SocketAdapter(ip, Integer.parseInt(port));
- socketpool[i].setBusy();
- // System.out.println("socket"+i);
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- return s;
- }else{
- continue;
- }
- }
- }
- }
- else { //如果连接为空,证明超过最小连接数,重新生成连接
- try {
- System.out.println("new socket"+i);
- s = socketpool[i] = new SocketAdapter(ip, Integer.parseInt(port));
- return s;
- }
- catch (Exception e) {
- //never throw
- return null;
- }
- }
- }
- return s;
- }
- /**
- * 初始化连接池
- * @throws UnknownHostException
- * @throws IOException
- */
- public void init() throws UnknownHostException, IOException {
- socketpool = new SocketAdapter[max_size];
- for (int i = 0; i < max_size; i++) {
- object_lock_list[i]=new Object();
- }
- System.out.println("System init success ....");
- }
- /**
- * 重新启动连接池
- * @throws UnknownHostException
- * @throws IOException
- */
- public void restart() throws UnknownHostException, IOException {
- destroy();
- init();
- }
- /**
- * 注销此连接池
- * @throws IOException
- */
- public void destroy() throws IOException {
- for (int i = 0; i < socketpool.length; i++) {
- if (socketpool[i] != null) {
- SocketAdapter adapter = (SocketAdapter) socketpool[i];
- adapter.destroy();
- //System.out.print("" );
- }
- }
- System.out.println("\ndestory success ....");
- }
- /**
- * 生成此连接池实现的对象
- * @throws UnknownHostException
- * @throws IOException
- * @return ConnectionProvider
- */
- public static ConnectionProvider newInstance() throws
- UnknownHostException, IOException {
- if (provider == null) {
- synchronized (object_lock) {
- if (provider == null) {
- provider = new MyConnectionProvider();
- }
- }
- }
- return provider;
- }
- /**
- * 读取properties文件。
- * @param key
- * @param properName
- * @return
- */
- public static String readProperties(String key, String properName) {
- ResourceBundle rsrc = null;
- String value = "";
- rsrc = ResourceBundle.getBundle(properName);
- value = rsrc.getString(key);
- return value;
- }
- }
Main
- package com.wondersgroup.stjt.mail.action;
- import java.io.BufferedReader;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.InetAddress;
- import java.net.InetSocketAddress;
- import java.net.Socket;
- import java.net.SocketAddress;
- import java.net.UnknownHostException;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.Properties;
- import java.util.ResourceBundle;
- import com.wondersgroup.framework.core.web.action.xwork.AbstractAjaxAction;
- import com.wondersgroup.module.common.ExecuteSql;
- import com.wondersgroup.stjt.util.StringUtil;
- import com.wondersgroup.stjt.mail.util.*;
- public class ShmetromailAction extends AbstractAjaxAction {
- //private String emailDomain = "@shmetro.com";
- //private String host = "222.66.3.199";
- //private int port = 8888;
- private String errMsg = "-";
- private String okMsg = "+";
- public String getMailDetail() throws UnknownHostException {
- //获得用户名
- String curLoginName = (String) this.getRequest().getSession()
- .getAttribute("login_name");
- String mailLoginName = "";
- String mailPwd = "";
- //取得用户email地址和email密码!
- ExecuteSql dealsql = new ExecuteSql();
- String sql = "select t.id,t.email from cs_user t where t.login_name='"+curLoginName+"'";
- //System.out.println("sql");
- //dealsql.ExecuteSql(sql);
- //String mailLoginName="";
- int iuserid=0;
- //String mailPwd="";
- try{
- ResultSet rs = dealsql.ExecuteDemandSql(sql);
- if(rs.next()){
- iuserid = rs.getInt("ID");
- mailLoginName=rs.getString("EMAIL");
- //System.out.println(iuserid+"----"+mailLoginName);
- }
- sql="select t.email_passwd from t_cs_user t where t.id='"+iuserid+"'";
- rs = dealsql.ExecuteDemandSql(sql);
- if(rs.next()){
- mailPwd=rs.getString("email_passwd");
- //System.out.println(iuserid+"--++--"+mailPwd);
- }
- rs.close();
- }catch(Exception e){
- e.printStackTrace();
- createJSonData("{\"success\":false, \"results\": \"connectionerr\"}");
- return AJAX;
- }finally{
- try {
- dealsql.close();
- } catch (SQLException e) {
- e.printStackTrace();
- createJSonData("{\"success\":false, \"results\": \"connectionerr\"}");
- return AJAX;
- }
- }
- //判断地址,密码和发性
- //Socket connection=null;
- if(StringUtil.isNull(mailLoginName)||!mailLoginName.matches("\\S+@shmetro\\.com")||StringUtil.isNull(mailPwd)){
- createJSonData("{\"success\":false, \"results\": \"errgetemailifo\"}");
- return AJAX;
- }
- SocketAdapter connection = null;
- int allMailCount=0;
- int unReadCount=0;
- // connect to server
- try {
- //获取新的connection
- ConnectionProvider conpool=MyConnectionProvider.newInstance();
- connection=conpool.getConnection();
- if(connection==null){
- createJSonData("{\"success\":false, \"results\": \"errgetconnection\"}");
- return AJAX;
- }
- //so1.setKeepAlive(true);
- //connection=so1;
- BufferedReader input = new BufferedReader(new InputStreamReader(
- connection.getInputStream()));// 接受
- PrintWriter out = new PrintWriter(connection.getOutputStream(),
- true/* autoFlush */);// 传输
- String info = null;// 接受信息
- // read information from server
- info = input.readLine();
- //输入邮件地址,密码
- BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- String sInput =null;
- String line = null;
- out.println("USER " + mailLoginName);
- System.out.println("USER " + mailLoginName);
- out.flush();
- line = input.readLine();
- System.out.println("line " + line);
- if(StringUtil.isNull(line)||line.startsWith(errMsg)){
- createJSonData("{\"success\":false, \"results\": \"errloginname\"}");
- return AJAX;
- }
- //System.out.println("1"+line);
- out.println("PASS " + mailPwd);
- out.flush();
- line = input.readLine();
- //System.out.println("line2 " + line);
- if(StringUtil.isNull(line)||line.startsWith(errMsg)){
- createJSonData("{\"success\":false, \"results\": \"errpwd\"}");
- return AJAX;
- }
- //System.out.println("2"+line);
- //进入目录查找邮件信息。
- out.println("CHDIR inbox");
- line = input.readLine();
- if(StringUtil.isNull(line)||line.startsWith(errMsg)){
- createJSonData("{\"success\":false, \"results\": \"errchdir\"}");
- return AJAX;
- }
- //System.out.println("3"+line);
- out.println("LIST");
- line = input.readLine();
- if(StringUtil.isNull(line)||line.startsWith(errMsg)){
- createJSonData("{\"success\":false, \"results\": \"errchdir\"}");
- return AJAX;
- }
- int i=0;
- //获取邮件信息并统计
- while((line = input.readLine()) != null){
- //System.out.println(i++);
- int temp=getMailInfo(line);
- if(temp!=-1){
- if(temp!=-2){
- allMailCount++;
- if(temp==0){
- unReadCount++;
- }
- }else{
- break;
- }
- }else{
- createJSonData("{\"success\":false, \"results\": \"errmailinfo\"}");
- return AJAX;
- }
- //System.out.println(line);
- }
- //System.out.println(allMailCount+"----"+unReadCount);
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- if (connection != null)
- try {
- connection.close();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- //返回。
- createJSonData("{\"success\":true, \"results\":{\"allMailCount\": \""+allMailCount+"\", \"unReadCount\": \""+unReadCount+"\"}}");
- return AJAX;
- }
- private static int getMailInfo(String line) {
- if(line.matches("\\S+\\s+\\S+\\s+\\d+")){
- String re=line.split("\\s+")[2];
- return Integer.parseInt(re);
- }
- //System.out.println("==="+line+"===");
- if(line.matches(".")){
- //System.out.println("yes");
- return -2;
- }
- return -1;
- }
- public static void main(String[] args) throws IOException{
- String errMsg = "-";
- String okMsg = "+";
- String mailLoginName = "limingmin@shmetro.com";
- String mailPwd = "1111";
- SocketAdapter connection = null;
- int allMailCount=0;
- int unReadCount=0;
- // connect to server
- try {
- //获取新的connection
- ConnectionProvider conpool=MyConnectionProvider.newInstance();
- connection=conpool.getConnection();
- if(connection==null){
- }
- //so1.setKeepAlive(true);
- //connection=so1;
- BufferedReader input = new BufferedReader(new InputStreamReader(
- connection.getInputStream()));// 接受
- PrintWriter out = new PrintWriter(connection.getOutputStream(),
- true/* autoFlush */);// 传输
- String info = null;// 接受信息
- // read information from server
- //info = input.readLine();
- //输入邮件地址,密码
- //BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- String sInput =null;
- String line = null;
- out.println("USER " + mailLoginName);
- System.out.println("USER " + mailLoginName);
- out.flush();
- line = input.readLine();
- System.out.println("line " + line);
- if(StringUtil.isNull(line)||line.startsWith(errMsg)){
- }
- //System.out.println("1"+line);
- out.println("PASS " + mailPwd);
- out.flush();
- line = input.readLine();
- //System.out.println("line2 " + line);
- if(StringUtil.isNull(line)||line.startsWith(errMsg)){
- }
- //System.out.println("2"+line);
- //进入目录查找邮件信息。
- out.println("CHDIR inbox");
- line = input.readLine();
- if(StringUtil.isNull(line)||line.startsWith(errMsg)){
- }
- //System.out.println("3"+line);
- out.println("LIST");
- line = input.readLine();
- if(StringUtil.isNull(line)||line.startsWith(errMsg)){
- }
- int i=0;
- //获取邮件信息并统计
- while((line = input.readLine()) != null){
- //System.out.println(i++);
- int temp=getMailInfo(line);
- if(temp!=-1){
- if(temp!=-2){
- allMailCount++;
- if(temp==0){
- unReadCount++;
- }
- }else{
- break;
- }
- }else{
- }
- //System.out.println(line);
- }
- //System.out.println(allMailCount+"----"+unReadCount);
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println("111111111111111111111111111111111111111");
- } finally {
- if (connection != null)
- try {
- connection.close();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
0 0
- Java使用Socket读写邮件服务器示例
- Java 使用 Socket 池 读写 示例
- Java 使用 Socket 池 读写 示例
- Java 使用 Socket 池 读写 示例
- java Socket使用示例
- java socket使用示例
- JAVA连接Domino服务器收发邮件代码示例
- java发送邮件示例
- [Java开发] Java服务器使用socket通信
- java Socket 发送邮件
- Java Socket 发送邮件
- 非阻塞socket服务器示例
- Unity3d使用Socket与java服务器通信
- Unity3d使用Socket与java服务器通信
- Unity3d使用Socket与java服务器通信
- 使用Java socket简单模拟HTTP服务器
- Java中读写锁ReadWriteLock的使用示例
- Java socket经典示例
- BI商务智能对于企业的意义
- 【3】Java并发编程:多线程基本概念
- 有用的IT网站
- Android NotificationManager简读
- SVN版本控制与分支设置
- Java使用Socket读写邮件服务器示例
- BZOJ3158 千钧一发
- LInux 进程间通信-FIFO总结
- 常用的数据标准化方法
- 10进制整型转16进制整型?
- IntelliJ IDEA中出现PSI and index do not match的错误的解决办法
- 磁盘调度算法
- 3Sum
- window.returnValue使用方法