获取邮箱联系人 --- 附源码

获取邮箱联系人

米聊有个邀请邮箱好友的功能,因为项目需要实现该功能,所以这些天稍稍的研究了下。刚好今天周末,发出来跟大家一起分享分享。


首先得感谢 flyerhzm@gmail.com 这位 牛哥” , 他把很多邮箱的联系人都给爬出来了。然后打包成jar 发布出来了。源码也放在google  code 里面了。


 原理是这样的:登陆邮箱,保存相关的信息(cookies),通过httpclient访问有通讯录的页面,爬出相关的联系人昵称和邮箱。

        


代码如下:

EmailType

package com.duicky.email;

/**
 * 邮箱的类型
 * 
 * @author luxiaofeng
 *
 */
public class EmailType {
	public static final int email_gmail = 1;
	public static final int email_sina = 2;
	public static final int email_163 = 3;
	public static final int email_yahoo = 4;
	public static final int email_hotmail = 5;
	public static final int email_139 = 6;
	public static final int email_sohu = 7;
	public static final int email_yeah = 8;
	public static final int email_126 = 9;
	public static final int email_189 = 10;
	public static final int email_tom = 11;
	public static final int email_msn = 12;
}

  


EmailManager

package com.duicky.email;

import java.util.List;

import com.huangzhimin.contacts.Contact;
import com.huangzhimin.contacts.ContactsImporter;
import com.huangzhimin.contacts.ContactsImporterFactory;
import com.huangzhimin.contacts.exception.ContactsException;

/**
 * 
 * 
 * @author luxiaofeng
 *
 */
public class EmailManager {

	private static EmailManager emailManager = null;

	private EmailManager() {

	}

	public static EmailManager getInstence() {
		if (emailManager == null) {
			emailManager = new EmailManager();
		}
		return emailManager;
	}

	/**
	 * 获取邮箱通讯录
	 * 
	 * @param type    邮箱类型
	 *            1-gmail,2-sina,3-163,4-yahoo,5-hotmail,6-139,7-sohu,8-yeah,
	 *            9-126,10-189,11-tom,12-msn
	 * @param account   帐号名
	 * 
	 * @param password   密码
	 * 
	 * @return 邮箱通讯录字符串
	 * 
	 *         如果成功 返回格式如下:
	 *         通讯录有好友:<c><o><n>张三</n><e>123@qq.com</e></o><o><n>李四</n><e>431
	 *         @qq.com</e></o></c> 其中以C为大标签,o为一个通讯录好友,n为昵称,e为邮箱 
	 *         通讯录无好友:0
	 *         如果失败 则返回  "-1"
	 */
	public String getEmailContacts(int type, String account, String password) {
		StringBuilder sb = new StringBuilder();
		ContactsImporter importer = null;
		try {
			importer = getContactsImporter(type, account, password);
			if (importer == null) {
				sb.append("-1");
				return sb.toString();
			}

			List<Contact> contacts = importer.getContacts();
			int size = contacts.size();
			if (size > 0) {
				sb.append("<c>");
				for (int i = 0; i < size; i++) {
					sb.append("<o><n>");
					sb.append(contacts.get(i).getUsername());
					sb.append("</n>");
					sb.append("<e>");
					sb.append(contacts.get(i).getEmail());
					sb.append("</e></o>");
				}
				sb.append("</c>");
			} else {
				sb.append("0");
			}
		} catch (ContactsException e) {
			sb.append("-1");
			e.printStackTrace();
		}
		return sb.toString();
	}

	/**
	 * 邀请邮箱好友
	 * @return			成功则  返回成功个数 <count>6<count>
	 * 					失败则  返回-1
	 */
	public String inviteEmailContacts() {
		
		String result = "";
		
		return result;
	}
	
	/**
	 * 获取对应邮箱类型的Importer
	 * @param type
	 * @param account
	 * @param password
	 * @return
	 */
	private ContactsImporter getContactsImporter(int type, String account,
			String password) {
		ContactsImporter importer = null;
		
		switch (type) {
			case EmailType.email_gmail:
				importer = ContactsImporterFactory.getGmailContacts(account, password);
				break;
			case EmailType.email_sina:
				importer = ContactsImporterFactory.getSinaContacts(account, password);
				break;
			case EmailType.email_163:
				importer = ContactsImporterFactory.getOneSixThreeContacts(account, password);
				break;
			case EmailType.email_yahoo:
				importer = ContactsImporterFactory.getYahooContacts(account, password);
				break;
			case EmailType.email_hotmail:
				importer = ContactsImporterFactory.getHotmailContacts(account, password);
				break;
			case EmailType.email_139:
				importer = ContactsImporterFactory.getOneThreeNineContacts(account, password);
				break;
			case EmailType.email_sohu:
				importer = ContactsImporterFactory.getSohuContacts(account, password);
				break;
			case EmailType.email_yeah:
				importer = ContactsImporterFactory.getSinaContacts(account, password);
				break;
			case EmailType.email_126:
				importer = ContactsImporterFactory.getOneTwoSixContacts(account, password);
				break;
			case EmailType.email_189:
				importer = ContactsImporterFactory.getOneEightNineContacts(account, password);
				break;
			case EmailType.email_tom:
				importer = ContactsImporterFactory.getTomContacts(account, password);
				break;
			case EmailType.email_msn:
				importer = ContactsImporterFactory.getMSNContacts(account, password);
				break;
			default:
				return null;
		}
		return importer;
	}

}

  


         项目的需要,我把获取后的联系人用一个String返回然后通过正则表达式匹配,需要修改的兄弟可以把它改成返回一个list集合。因为发邮件的接口设计到公司内部的东西,这边就不公开了。

        

         该项目需要导入好多jar,jar包统一放在libs文件夹中。哥们自己buildpath

 

写了个测试的类,没几行代码:

 

package com.duicky.email;

public class EmailManagerTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String emailAccount = "";	// your email account
		String password = "";		// you know
		int type = EmailType.email_msn;  // your email type ,  such : EmailType.email_msn;
		String str = EmailManager.getInstence().getEmailContacts(type, emailAccount, password);
		System.out.println("我的邮箱好友:"+str);
	}

}

  

运行效果如下:

 

我的邮箱好友:<c><o><n>自己1</n><e>lxf454162034@gmail.com</e></o><o><n>自己2</n><e>luxiaofeng544@hotmail.com</e></o><o><n>自己3</n><e>luxiaofeng544@sina.com</e></o><o><n>自己4</n><e>lxf454162034@163.com</e></o></c>

  

 

 

该项目有点欠缺,一大部分邮箱都能拿到,还有个别邮箱通讯录无法获取(163,139==),想获取所有的同学自己修改源码,爬去把。核心代码 Google Code 的地址是 http://code.google.com/p/contact-list/

 

欢迎转载,请注明出处 http://blog.csdn.net/dui_cky/article/details/6785250


点击下载本项目

 

posted on 2011-09-17 16:52  陆晓峰  阅读(4545)  评论(3编辑  收藏  举报

导航