Informationsphp-EWS: Fatal error: Uncaught exception SoapFault: [Client] s EWS_Exception 'Classe
Je dirige ce code comme une année et tout fonctionnait bien jusqu'à hier. Voir le message d'erreur ci-dessous. Le code récupère uniquement les nombres d'e-mails non lus dans la boîte de réception. Parmi les augmentations de nombre, il jouera également un son sur le client qui exécute le code. Mon Exchange serveur est en cours d'exécution Exchange Server 2013 CU12 mais il a toujours travaillé avec ExchangeWebServices :: VERSION_2010 (voir code bolow).
Message d'erreur
Erreur fatale: Uncaught exception SoapFault: [Client] Class 'EWS_Exception' ne trouve pas dans la trace /var/www/html/php-ews/NTLMSoapClient.php:87 Stack: # 0 /var/www/html/php-ews/NTLMSoapClient.php(87): NTLMSoapClient :: __ doRequest() # 1 [fonction interne]: NTLMSoapClient-> __doRequest ('https: //mail.se ...', ' http://schemas .... '1, 0) # 2 /var/www/html/php-ews/ExchangeWebServices.php(552): SoapClient -> __ call (' FindItem », Array) # 3/var/www/html /php-ews/ExchangeWebServices.php(552): NTLMSoapClient_Exchange-> FindItem (Object (EWSType_FindItemType)) # 4 /var/www/html/mail.php(104): ExchangeWebServices-> FindItem (Object (EWSType_FindItemType)) # 5 {main} jeté dans/var/www/html/php-ew s/NTLMSoapClient.php en ligne 87
Mon code est basé sur celui qui se trouve ici: http://litphp.info/want_to_print_unread_mail_body_and_subject_using_ews_from_exchange_server_in_php
Mon code
function __autoload($class_name)
{
// Start from the base path and determine the location from the 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("mail.server.path.com", $mailuser, $mailpass, ExchangeWebServices::VERSION_2010);
$request = new EWSType_FindItemType();
$itemProperties = new EWSType_ItemResponseShapeType();
$itemProperties->BaseShape = EWSType_DefaultShapeNamesType::ID_ONLY;
$itemProperties->BodyType = EWSType_BodyTypeResponseType::BEST;
$request->ItemShape = $itemProperties;
$fieldType = new EWSType_PathToUnindexedFieldType();
$fieldType->FieldURI = 'message:IsRead';
$constant = new EWSType_FieldURIOrConstantType();
$constant->Constant = new EWSType_ConstantValueType();
$constant->Constant->Value = "0";
$IsEqTo = new EWSType_IsEqualToType();
$IsEqTo->FieldURIOrConstant = $constant;
$IsEqTo->Path = $fieldType;
$request->Restriction = new EWSType_RestrictionType();
$request->Restriction->IsEqualTo = new EWSType_IsEqualToType();
$request->Restriction->IsEqualTo->FieldURI = $fieldType;
$request->Restriction->IsEqualTo->FieldURIOrConstant = $constant;
$request->IndexedPageItemView = new EWSType_IndexedPageViewType();
$request->IndexedPageItemView->BasePoint = 'Beginning';
$request->IndexedPageItemView->Offset = 0;
$request->ParentFolderIds = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
$request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId->Mailbox = new StdClass;
$request->ParentFolderIds->DistinguishedFolderId->Mailbox->EmailAddress = '[email protected]';
$request->ParentFolderIds->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::INBOX;
$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
$result = new EWSType_FindItemResponseMessageType();
$result = $ews->FindItem($request);
if ($result->ResponseMessages->FindItemResponseMessage->ResponseCode == 'NoError' && $result->ResponseMessages->FindItemResponseMessage->ResponseClass == 'Success'){
// Need this variable to check for the new value.
$count_new = $result->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView;
// Play sound if value has increased.
if($_SESSION['count_previous'] < $count_new) {
echo '<script type="text/javascript">play_sound();</script>';
}
// Saving the value for later usage.
$count = $result->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView;
// Saving the current count to a session. Need it to compair with the new value ($count_new).
$_SESSION['count_previous'] = $count;
if($count > 0) {
echo '<script type="text/javascript">document.body.style.backgroundColor = "#fc2828";</script>';
echo "<h1>" . $count . "</h1><br>";
echo '<img src="img/mail.png" height="165px">';
} else {
echo '<h1 class="paddingH12 test">No mail</h1>';
}
}
Après un certain temps, je pensais que ce pourrait être que le code arrêté fonctionnant "comme" VERSION_2010 puisque le serveur est 2013 CU12. J'ai essayé la solution suivante mais cela n'a pas fonctionné: https://github.com/jamesiarmes/php-ews/issues/195
Est-ce que quelqu'un sait comment ce problème pourrait être résolu? C'est un peu frustrant puisque le code a fonctionné pendant un an et maintenant il ne fonctionne plus. Rien n'a été changé du côté du serveur.
Merci d'avance.
Je suggère fortement vous vous éloignez de sa bibliothèque, c'est vieux et non entretenu. Je suggère d'essayer ma fourchette à http://github.com/garethp/php-ews, qui comprend un exemple simple sur la façon d'obtenir des emails non lus assez facilement –
Aha, merci beaucoup mon pote. Je vérifierai. – Treps