当前位置: 首页 > PHP > PHP Exchange Web Services php-ews

PHP Exchange Web Services php-ews

  • 分类:PHP
  • 本文标签: php扩展
  • 发布时间:2015-09-16 14:35:52
  • 作者:Ferman
  • 查看数: 185

如果公司用到了微软的Exchange,那么开发项目的时候可能就会用到这个扩展php-ews,比如根据一个邮箱账号,判断该用户是否是部门的总监,而你又不太了解其他的语言,只能通过php来实现,那就需要用到php-ews这个扩展。

该项目可以实现获取联系人列表、获取邮件列表、获取邮件详情、获取联系人详情、获取联系人组内联系人列表、获取当前在线人员列表等,具体的方法可以参考下官方的api。

开源项目地址:https://github.com/jamesiarmes/php-ews

首先定义自动加载函数并,实例化:

function __autoload($class_name) {
    $base_path = 'php-ews';
    $include_file = $base_path . '/' . str_replace('_', '/', $class_name) . '.php';
    return (file_exists($include_file) ? require_once $include_file : false);
}
$ews = new ExchangeWebServices('x.x.com', 'user', 'password', 
ExchangeWebServices::VERSION_2010);

以下是几个实例:

1、利用php-ews获取联系人列表中的所有联系人

$request = new EWSType_FindItemParentType();
$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;
$request->ContactsView = new EWSType_ContactsViewType();
//如果是中文联系人则下面这两句就不需要了
$request->ContactsView->InitialName = 'a';
$request->ContactsView->FinalName = 'z';
$request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::CONTACTS;
$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
$response = $ews->FindItem($request);

2、获取某个邮件组内的所有联系人地址

$request = new EWSType_ExpandDLType();
$request->Mailbox = new EWSType_EmailAddressType();
$request->Mailbox->EmailAddress = 'all_director@ifeng.com';
$response = $ews->ExpandDL($request);

3、获取某个组的组邮件地址,前提是要有改组的itemid,格式如下所示:

$request = new EWSType_ExpandDLType();
$request->Mailbox = new EWSType_EmailAddressType();
$request->Mailbox->ItemId = new EWSType_ItemIdType();
$request->Mailbox->ItemId
->Id = 'AAMkAGE2NmE5NjYxLWI3ODEtNDY0OS1hOWRhLTVmNzM4NTJjY2IyMgBGAAAAAAB
Obx+7ZscnQ7UZdqhDOEwJBwDb8QrBnHLXS6FoTMF2vHUsAAAAWjNmAADDWvv21YrrTqN0OrBODj9xAAAP7I4CAAA=';
$response = $ews->ExpandDL($request);

4、获取邮件列表,在这里可以取得邮件的contact_id,用来获取邮件的详细信息

$request = new EWSType_FindItemType();
$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::DEFAULT_PROPERTIES;
$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
$request->ParentFolderIds = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
$request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId
->Id = EWSType_DistinguishedFolderIdNameType::INBOX;
// sort order
$request->SortOrder = new EWSType_NonEmptyArrayOfFieldOrdersType();
$request->SortOrder->FieldOrder = array();
$order = new EWSType_FieldOrderType();
// sorts mails so that oldest appear first
// more field uri definitions can be found from types.xsd (look for UnindexedFieldURIType)
$order->FieldURI->FieldURI = 'item:DateTimeReceived'; 
$order->Order = 'Ascending'; 
$request->SortOrder->FieldOrder[] = $order;
$response = $ews->FindItem($request);

5、获取某一个邮件的详细信息,根据contact_id,格即如下面所示

$contact_id = 'AAMkAGE2NmE5NjYxLWI3ODEtNDY0OS1hOWRhLTVmNzM4NTJjY2IyMgBGAAAAAABObx+7ZscnQ7
UZdqhDOEwJBwDb8QrBnHLXS6FoTMF2vHUsAAAAWjNmAADDWvv21YrrTqN0OrBODj9xAAAP7I4CAAA='; 
$request = new EWSType_GetItemType();
$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;
$request->ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType();
$request->ItemIds->ItemId = new EWSType_ItemIdType();
$request->ItemIds->ItemId->Id = $contact_id;
$response = $ews->GetItem($request);

还有其他的一些方法可以具体参考,php-ews的wiki,或者官方的扩展

开源项目实例地址:https://github.com/jamesiarmes/php-ews/wiki

微软官方api:https://msdn.microsoft.com/EN-US/library/bb204119(v=exchg.150).aspx


转载时请以 超链接的形式 注明:转自Ferman

  • 熊猫

    您好。我在调用的时候出现了点问题。能否请您指教一下.我的QQ 442067400 先谢谢啦

  • hongbo819

    回复 熊猫:哪里的问题,我没有qq。你可以在此留微信,我会联系你

  • 熊猫

    额,怎么变空了......

  • 熊猫

    回复 hongbo819:^_^,谢谢。我加你微信了。我在构造$request的时候。发现$request大部分为null
    然后造成执行FindItem 方法是返回401错误
    部分调试错误信息我贴出来

  • 熊猫

    var_dump($request);的结果如下:
    Warning: Creating default object from empty value in /usr/local/apache2/htdocs/typt/ews.php on line 93
    object(EWSType_FindItemParentType)#2 (11) {
    ["AbsoluteDenominator"]=>
    NULL
    ["Groups"]=>
    NULL
    ["IncludesLastItemInRange"]=><

  • hongbo819

    回复 熊猫:与时俱进,都用上2016版本的了

                  

About me