在sns应用中,经常会有通过邮件邀请朋友这个功能。在这里面,得到邮件地址列表很关键。下面是我写的一个获取163邮件地址列表的类。或去其他邮箱的方法大致相同。
<?php
/**
* get address list from 163 mail box
*/
define( "COOKIEJAR", tempnam( "/tmp", "cookie" ) );
class adrSnatcher
{
/**
* @desc: login in the 163 mail box
* @param string $username
* @param string $password
* @return int //the login status
*/
function login( $username, $password )
{
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_URL, "https://reg.163.com/logins.jsp" );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=".$username."&password=".$password."&type=1" );
curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
ob_start( );
curl_exec( $ch );
$contents = ob_get_contents( );
ob_end_clean( );
curl_close( $ch );
if ( strpos( $contents, "安全退出" ) !== false )
{
return 0;
}
return 1;
}
/**
* @desc: get address list from mail box
* @param string $username
* @param string $password
* @return array //the address list
*/
function getAddressList( $username, $password)
{
if ( !$this->login( $username, $password ) )
{
return 0;
}
$this->_getcookie();
$cookies = $this->_readcookies( COOKIEJAR);
$cookieid = substr( trim( $cookies['Coremail'] ), -32 );
if ( !$cookieid )
{
return 0;
}
//get the address list page information
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_URL, "http://cg5a85.mail.163.com/a/s?sid=".$cookieid."&func=global:sequential" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( "Content-Type: application/xml" ) );
$str = "<?xml version=/"1.0/"?><object><array name=/"items/"><object><string name=/"func/">pab:searchContacts</string>" .
"<object name=/"var/"><array name=/"order/"><object><string name=/"field/">FN</string><boolean name=/"ignoreCase/">true</boolean></object>" .
"</array></object></object><object><string name=/"func/">user:getSignatures</string></object>" .
"<object><string name=/"func/">pab:getAllGroups</string></object></array></object>";
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $str );
curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
ob_start( );
curl_exec( $ch );
$contents = ob_get_contents( );
ob_end_clean( );
curl_close( $ch );
//get mail list from the page information
$pattern = "/([//w_-])+@([//w])+([//w.]+)/";
if ( preg_match_all( $pattern, $contents, $tmpres, PREG_PATTERN_ORDER ) )
{
$result = array_unique( $tmpres[0] );
}
return $result;
}
/**
* get cookie
*/
function _getcookie( )
{
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_URL, "http://fm163.163.com/coremail/fcg/ntesdoor2?verifycookie=1&lightweight=1" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
ob_start( );
curl_exec( $ch );
$contents = ob_get_contents( );
ob_end_clean( );
curl_close( $ch );
}
/**
* get cookie from file
*/
function _readcookies( $file)
{
$result = null;
$fp = fopen( $file, "r" );
if($fp)
{
while ( !feof( $fp ) )
{
$buffer = fgets( $fp, 4096 );
$tmp = split( "/t", $buffer );
$result[trim( $tmp[5] )] = trim( $tmp[6] );
}
fclose($fp);
}
return $result;
}
}
?>
调用:
<?php
require_once("adrsnatcher.class.php");
$username = "xxxxxx";
$password = "xxxxxx";
$asn = new adrSnatcher();
$addresslist = $asn->getAddressList($username, $password);
var_dump($addresslist);
?>
<?php
/**
* get address list from 163 mail box
*/
define( "COOKIEJAR", tempnam( "/tmp", "cookie" ) );
class adrSnatcher
{
/**
* @desc: login in the 163 mail box
* @param string $username
* @param string $password
* @return int //the login status
*/
function login( $username, $password )
{
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_URL, "https://reg.163.com/logins.jsp" );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=".$username."&password=".$password."&type=1" );
curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
ob_start( );
curl_exec( $ch );
$contents = ob_get_contents( );
ob_end_clean( );
curl_close( $ch );
if ( strpos( $contents, "安全退出" ) !== false )
{
return 0;
}
return 1;
}
/**
* @desc: get address list from mail box
* @param string $username
* @param string $password
* @return array //the address list
*/
function getAddressList( $username, $password)
{
if ( !$this->login( $username, $password ) )
{
return 0;
}
$this->_getcookie();
$cookies = $this->_readcookies( COOKIEJAR);
$cookieid = substr( trim( $cookies['Coremail'] ), -32 );
if ( !$cookieid )
{
return 0;
}
//get the address list page information
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_URL, "http://cg5a85.mail.163.com/a/s?sid=".$cookieid."&func=global:sequential" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( "Content-Type: application/xml" ) );
$str = "<?xml version=/"1.0/"?><object><array name=/"items/"><object><string name=/"func/">pab:searchContacts</string>" .
"<object name=/"var/"><array name=/"order/"><object><string name=/"field/">FN</string><boolean name=/"ignoreCase/">true</boolean></object>" .
"</array></object></object><object><string name=/"func/">user:getSignatures</string></object>" .
"<object><string name=/"func/">pab:getAllGroups</string></object></array></object>";
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $str );
curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
ob_start( );
curl_exec( $ch );
$contents = ob_get_contents( );
ob_end_clean( );
curl_close( $ch );
//get mail list from the page information
$pattern = "/([//w_-])+@([//w])+([//w.]+)/";
if ( preg_match_all( $pattern, $contents, $tmpres, PREG_PATTERN_ORDER ) )
{
$result = array_unique( $tmpres[0] );
}
return $result;
}
/**
* get cookie
*/
function _getcookie( )
{
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_URL, "http://fm163.163.com/coremail/fcg/ntesdoor2?verifycookie=1&lightweight=1" );
curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
ob_start( );
curl_exec( $ch );
$contents = ob_get_contents( );
ob_end_clean( );
curl_close( $ch );
}
/**
* get cookie from file
*/
function _readcookies( $file)
{
$result = null;
$fp = fopen( $file, "r" );
if($fp)
{
while ( !feof( $fp ) )
{
$buffer = fgets( $fp, 4096 );
$tmp = split( "/t", $buffer );
$result[trim( $tmp[5] )] = trim( $tmp[6] );
}
fclose($fp);
}
return $result;
}
}
?>
调用:
<?php
require_once("adrsnatcher.class.php");
$username = "xxxxxx";
$password = "xxxxxx";
$asn = new adrSnatcher();
$addresslist = $asn->getAddressList($username, $password);
var_dump($addresslist);
?>