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

标签: 邮箱 源码 | 发表时间:2011-09-17 16:52 | 作者:duicky Ashaum
出处:http://www.cnblogs.com/

获取邮箱联系人

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


首先得感谢 [email protected] 这位 牛哥” , 他把很多邮箱的联系人都给爬出来了。然后打包成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>[email protected]</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>[email protected]</e></o><o><n>自己2</n><e>[email protected]</e></o><o><n>自己3</n><e>[email protected]</e></o><o><n>自己4</n><e>[email protected]</e></o></c>

  

 

 

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

 

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


点击下载本项目

 

作者: duicky 发表于 2011-09-17 16:52 原文链接

评论: 1 查看评论 发表评论


最新新闻:
· 英特尔被ARM挤出移动产品市场 或明年发力(2011-09-18 08:23)
· 乔布斯咬了上帝的苹果(2011-09-18 08:21)
· 中国移动互联网业的所罗门之路:赢在“云”端(2011-09-18 08:20)
· 考拉盒子:儿童应用精品聚集地(2011-09-18 00:26)
· 小鬼子的虚拟体感装置,让你体会被刺穿的感觉(2011-09-18 00:25)

编辑推荐:TechEd社区之夜暨博客园北京俱乐部活动报名

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [邮箱 源码] 推荐:

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

- Ashaum - 博客园-首页原创精华区
米聊有个邀请邮箱好友的功能,因为项目需要实现该功能,所以这些天稍稍的研究了下. 刚好今天周末,发出来跟大家一起分享分享. 首先得感谢 [email protected] 这位 “牛哥” , 他把很多邮箱的联系人都给爬出来了. 源码也放在google  code 里面了.  原理是这样的:登陆邮箱,保存相关的信息(cookies等),通过httpclient访问有通讯录的页面,爬出相关的联系人昵称和邮箱.

Gmail邮箱7周年记:让Ajax成为邮箱标准

- boho - cnBeta.COM
2004年4月1日,Google正式推出Gmail,它改变了电子邮件,也改变了许多事. 七年前,如果我们想与世界上的其它人邮件通信,需要打开Outlook或者Eudora ,或者其它电脑桌面上的软件,输入电子邮件才能实现. 我们当中大多人有电子邮箱,可以从任何电脑上登录,极为便利,但它越越来越失宠.

网易邮箱的CSS开发(一)

- - 博客 - 伯乐在线
网易邮箱是个庞大而且细节繁多的系统,注定了前端开发中样式管理的复杂程度非常高. 如果没有一个合理的体系来管理样式,开发和维护的难度是不可想象的. 从极速3.5版本开始,我们就一直遵循并不断改善这套规则,现在就来分享一下~. 在错综复杂的样式面前,CSS显得过于简陋. 于是我们不得不人为的加上一些思维方式和规则来帮助我们管理样式.

【财新声明】财新记者邮箱被入侵

- 跨栏高手 - 政经频道_政经频道_财新网
  7月21日深夜,财新记者赵何娟发现所用GMAIL邮箱被入侵. 入侵者的IP地址为220.170.192.253.   经财新技术人员初步勘察,不晚于7月19日,赵何娟所用GMAIL邮箱遭遇来自IP地址220.170.192.253发起的连续攻击,最终破解并入侵邮箱. 这一攻击被GMAIL安全机制捕捉到并对用户本人发出了警报.

网易企业邮箱上线免费接收传真功能

- bill - cnBeta.COM
网易今日宣布,网易企业邮箱(qiye.163.com)正式上线邮件传真功能,用户可直接在网易企业邮箱Webmail中接收、下载和打印第三方发来的 传真文件,无需购买和配置传真机. 据介绍,为企业邮箱用户提供免费接收传真的功能仅为第一步,网易正在紧锣密鼓地开发传真发送的功能.

MailTab for Gmail – 菜单栏 Gmail 邮箱 [Mac] | 小众软件 > Mac

- Eleven - 小众软件
MailTab for Gmail 是小巧免费的 Gmail 客户端,菜单栏弹出式设计收缩自如. 本质上,程序就是一个专为 Gmail 打造的浏览器小窗口. 邮箱的查收时间、新邮件通知方式皆可订制,搜索快捷回复等功能一应俱全. 软件甚至支持 Gmail Chat,安全强大. 下载(0.3MB): 官方 | 来自小众软件.

QQ邮箱iPhone版 — 混搭式开发的尝试

- jeff - bang&#39;s blog
QQ邮箱iPhone版开发了几个月,多次延迟发布,过程十分艰辛. 这是第一次尝试混搭的开发方式,即整个应用主要由web组成,APP给web套上一个壳并提供一些原生的接口,以达到更好的体验. 我们使用了开源的PhoneGap框架,但其实到后来已经可以抛弃它了,没用它多少接口,自己实现一下也只是时间的问题.

GNotes – 同步手写笔记及涂鸦到 Gmail 邮箱 [Android]

- 可可 - 同步控
GNotes(http://www.gnotes.me,可能国内无法访问) 是一款可以将图片、语音、录入笔记和手写笔记、涂鸦等内容保存到 Gmail 的轻便型同步应用,曾获得豌豆荚评选出的设计奖. 有一些网友始终对国产的同步服务心存芥蒂,不敢把个人的隐私或重要内容保存在服务器端. 鉴于此,推荐这款以 Gmail 邮箱作为保存对象的工具.

网易邮箱极速4.0支持附件拖拽下载

- 韬光养晦 - cnBeta.COM
网易邮箱对外宣布,网易邮箱极速版4.0再次发力推出十多项新功能为用户带来全新体验. 可以无需安装邮件客户端软件,有新邮件也能通过桌面提醒,附件还可以直接拖拽完成下载. “支持附件拖拽下载,以及yeah.net邮箱新增来信桌面提醒是此次4.0升级的两大亮点,可以让网易邮箱用户收发邮件更快捷和方便. ”网易邮件事业部副总经理赵勇表示.

伊战美军阵亡士兵的邮箱密码之争

- bill - cnBeta.COM
2005年,伊拉克战场,一台计算机是美国海军陆战队工程师卡尔・林与外界交流的唯一渠道,他每周都会给远在弗吉尼亚州的父母发送电子邮件,并在个人网站上定期更新在伊拉克的影像记录. 当年1月26日,年仅20岁的林在一场突袭中丧生. 尚未从丧子之痛中恢复,林的父亲首先想到了联系儿子的电子邮件服务商,希望可以获得邮箱密码,保存其中的信件,寻找关于儿子的最后回忆.