HEAD
- 有一种精神,叫"公诚勤朴"
Recent Posts
- 导出Gmail通讯录(Export Gmail Contacts)
- Subversion 强制用户写备注(日志)才能提交.
- Linux 时间服务器同步命令
- PHP修改 LDAP用户密码程序
- Subversion安装与配置
- 我的Subversion使用LDAP认证之Apache配置实例
- HTTP协议(RFC2616)中的方法定义
- 我的HTTP Client 模拟PHP Class
- 我所使用的PHP图形验证码程序.
- DNS Bind9 配置实例
- (联合早报)中国社会信任的解体及其结果(转)
- Linux+Apache+MySQL+PHP 安装配置(三)——freeType,libpng,jpeg,gd,mcrypt,mhash,imap,PHP安装
- Linux+Apache+MySQL+PHP 安装配置(二)—— Apache安装
- Linux+Apache+MySQL+PHP 安装配置(一)—— MySQL安装
- 甲型H1N1流感防病要诀!
Recent Comments
挣点外快
<?php
/*
*****************************************************************
* Author: wzhu.email@gmail.com
* Date: 2010-05-26
* Description: This is a php class for Gmail Contacts
*****************************************************************
*/
class Gmail
{
private $_gClient = null;
private $_gAccount = null;
private $_gPassword= null;
private $_gService = 'cp';
private $_gScope = null;
function __construct($account,$password){
$temp = explode('@',$account);
$this->_gAccount = $temp[0].'@gmail.com';
$this->_gPassword= $password;
$this->getClient();
}
private function getClient(){
if($this->_gClient !== null ) return $this->_gClient;
$this->_gClient = Zend_Gdata_ClientLogin::getHttpClient($this->_gAccount,$this->_gPassword, $this->_gService);
return $this->_gClient;
}
private function getContactsGroupId($group='System Group: My Contacts'){
$scope = 'http://www.google.com/m8/feeds/groups/'.$this->_gAccount.'/full';
$gdata = new Zend_Gdata($this->_gClient);
$gdata->setMajorProtocolVersion(3);
$query = new Zend_Gdata_Query($scope);
$query->setMaxResults(10000);
$feed = $gdata->retrieveAllEntriesForFeed($gdata->getFeed($query));
foreach ($feed AS $entry){
if( strcasecmp( $entry->title->text, $group) == 0){
$arrIdExplode = explode("/",$entry->id->text);
return $arrIdExplode[(count($arrIdExplode)-1)];
}
}
}
/**
* Default Parameter is My Contacts
* Can setting other Group Contacts
* Empty Parameter is All Contacts
*/
public function getContacts($group='System Group: My Contacts'){
$scope = 'http://www.google.com/m8/feeds/contacts/'.$this->_gAccount.'/full';
$gdata = new Zend_Gdata($this->_gClient);
$gdata->setMajorProtocolVersion(3);
$query = new Zend_Gdata_Query($scope);
$query->setMaxResults(10000);
$feed = $gdata->retrieveAllEntriesForFeed($gdata->getFeed($query));
if(!empty($group)){
$grpid = $this->getContactsGroupId($group);
}
$arrContacts = Array();
foreach ($feed AS $entry){
$contact = Array();
$contact['Name'] = $entry->title->text;
$contact['Note'] = $entry->content->text;
$ext = $entry->getExtensionElements();
if(!empty($grpid)){
$groupFlag = false;
}
foreach($ext as $extension){
if( !empty($grpid) && $extension->rootElement == 'groupMembershipInfo' ){
$groupFlag = true;
$attr = $extension->getExtensionAttributes();
$itemGroupId = $attr['href']['value'];
if( strpos( $itemGroupId, '/base/'.$grpid)!== false ){
break;
}
}
if($extension->rootElement == 'email'){
$attr = $extension->getExtensionAttributes();
$contact['Mail'] = strtolower($attr['address']['value']);
list($t,$type) = explode('#',$attr['rel']['value']);
switch(strtolower($type)){
case 'work': $contact['WorkMail'] = $contact['Mail']; break;
case 'other': $contact['OtherMail'] = $contact['Mail']; break;
default: $contact['HomeMail'] = $contact['Mail']; break;
}
if(empty($contact['Name']) && !empty($contact['Mail'])){
$contact['Name'] = $contact['Mail'];
}
}else if($extension->rootElement == 'phoneNumber'){
$attr = $extension->getExtensionAttributes();
list($t,$type) = explode('#',$attr['rel']['value']);
switch(strtolower($type)){
case 'work': $contact['WorkPhone'] = $extension->text; break;
case 'mobile': $contact['MobilePhone'] = $extension->text; break;
case 'other': $contact['OtherPhone'] = $extension->text; break;
case 'home_fax': $contact['HomeFax'] = $extension->text; break;
case 'work_fax': $contact['WorkFax'] = $extension->text; break;
default: $contact['HomePhone'] = $extension->text; break;
}
}else if($extension->rootElement == 'organization'){
$attr=$extension->getExtensionElements();
if($attr[0]->rootElement == 'orgName'){
$contact['Company'] = $attr[0]->text;
}
if($attr[1]->rootElement == 'orgTitle'){
$contact['JobTitle'] = $attr[1]->text;
}
}else if($extension->rootElement == 'structuredPostalAddress'){
$elements=$extension->getExtensionElements();
$attr =$extension->getExtensionAttributes();
$addr = null;
foreach($elements AS $element){
if($element->rootElement == 'formattedAddress'){
$addr .= $element->text;
}
}
list($t,$type) = explode('#',$attr['rel']['value']);
switch(strtolower($type)){
case 'work': $contact['WorkAddr'] = $addr; break;
case 'other': $contact['OtherAddr'] = $addr break;
default: $contact['HomeAddr'] = $addr; break;
}
}else if($extension->rootElement == 'postalAddress'){
$attr = $extension->getExtensionAttributes();
list($t,$type) = explode('#',$attr['rel']['value']);
switch(strtolower($type)){
case 'work': $contact['WorkAddr'] = $extension->text; break;
case 'other': $contact['OtherAddr'] = $extension->text; break;
default: $contact['HomeAddr'] = $extension->text; break;
}
}
}
if(!empty($grpid) && !$groupFlag){
continue;
}
$name = explode('@',$contact['Name']);
$contact['Name'] = $name[0];
list($contact['Firstname'],$contact['Midname'],$contact['Lastname']) = preg_split( '/[\\s\\.]+/',$contact['Name'],
if(empty($contact['Lastname'])){
$contact['Lastname'] = $contact['Midname'];
$contact['Midname'] = '';
}
$arrContacts[] = $contact;
}
return $arrContacts;
}
public function getGmailSender($box="INBOX",$max=50) {
$error = array(
'failed'=>'Import failed',
'zero' =>'Your "Sent Mail" folder is empty.',
'auth' =>'Account information is wrong or Gmail server is not available now.'
);
$mburl = "{imap.gmail.com:993/imap/ssl}";
if(strcasecmp($box, 'sent mail') == 0){
$mailurl = $mburl.'[Gmail]/Sent Mail';
}else{
$mailurl = $mburl.'INBOX';
}
$mb = @imap_open($mailurl, $this->_gAccount, $this->_gPassword);
if($mb){
$num = @imap_num_msg($mb);
$arrContacts = Array();
for($i=0; $i<$num && $i<$max; $i++) {
$mailheader = (@imap_headerinfo ( $mb, $num-$i ));
if(strcasecmp($box, 'sent mail') == 0){
$info = $mailheader->to;
}else{
$info = $mailheader->from;
}
foreach($info as $key=>$val) {
$contact = array();
if(!empty($val->personal)){
$tmp = explode('@',$val->personal);
$personal = $tmp[0];
$rs = @imap_mime_header_decode($personal);
if( strcasecmp($rs[0]->charset,'default')!=0 ){
$name = @iconv($rs[0]->charset, 'UTF-8', $rs[0]->text);
}else{
$name = $rs[0]->text;
}
}else{
$name = $val->mailbox;
}
list($contact['Firstname'],$contact['Midname'],$contact['Lastname']) = preg_split('/[\s\.]+/',$contact['N
if(empty($contact['Lastname'])){
$contact['Lastname'] = $contact['Midname'];
$contact['Midname'] = '';
}
$email = strtolower($val->mailbox.'@'.$val->host);
$contact['Mail'] = $email;
}
$arrContacts[] = $contact;
}
@imap_close($mbox);
return $arrContacts;
}else{
throw new Exception("Gmail server or networking exception");
}
}
};