2013-01-21 140 views
4

我使用php-ews阅读交换邮箱。但是,我想从收件箱中选择一封电子邮件并回复该电子邮件,并附上电子邮件历史记录并发送回复。以下是我用来从收件箱中获取特定电子邮件的代码。使用php-ews回复电子邮件

$ews = new ExchangeWebServices($account_array['server'], $account_array['username'], $account_array['password'], ExchangeWebServices::VERSION_2010_SP1); 
$message_id = 'AAMkADU3ZDdmZmY3LWI3OGMtNDRmMy1hYTdlLTBlZjkwOGE3NTU5MwBGAAAAAADkJRKCdlaES7sRqf3veO/UBwCgoREk6zyqQqi6KC/gJMy0AAAAvGoCAACgoREk6zyqQqi6KC/gJMy0AAAAvGpQAAA='; 
$change_id = 'CQAAABYAAACgoREk6zyqQqi6KC/gJMy0AAAAvMEZ'; 

$request = new EWSType_GetItemType(); 
$request -> ItemShape = new EWSType_ItemResponseShapeType(); 
$request -> ItemShape -> BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES; 

$request -> ItemShape -> BodyType = EWSType_BodyTypeResponseType::HTML; 

$body_property = new EWSType_PathToUnindexedFieldType(); 
$body_property -> FieldURI = 'item:Body'; 
$request -> ItemShape -> AdditionalProperties = new EWSType_NonEmptyArrayOfPathsToElementType(); 
$request -> ItemShape -> AdditionalProperties -> FieldURI = array($body_property); 

$request -> ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType(); 
$request -> ItemIds -> ItemId = array(); 

$message_item = new EWSType_ItemIdType(); 
$message_item -> Id = trim($message_id); 
$request -> ItemIds -> ItemId[] = $message_item; 

$response = $ews -> GetItem($request); 
//print '<pre>' . print_r($response, true) . '</pre><hr/>'; 
$message = $response -> ResponseMessages -> GetItemResponseMessage -> Items -> Message; 

print '<pre>' . print_r($message, true) . '</pre><hr/>'; 

现在,我已收到要回复的邮件,如何进一步撰写回复邮件并为此电子邮件创建回复项目。

我已经搜索了谷歌这个,但没有运气。

钻入php-ews类几个小时,我看了一下EWSType_ReplyAllToItemType,EWSType_PostReplyItemType,EWSType_PostReplyItemBaseType等,但无法理解如何使用这些代码。

请帮帮忙!任何帮助将不胜感激。

我相信任何对这篇文章的回应都会有所帮助,因为没有论坛在讨论 这个问题。 :)

谢谢。

+0

使用PHP EX [回复电子邮件的可能重复更改Web服务](http://stackoverflow.com/questions/14318780/replying-to-an-email-using-php-exchange-web-services) – bummi

回答

2

终于找到了如何使用PHP-EWS回复电子邮件的答案。

首先,我们需要修改EWSType/MessageType.php,并在课程结束后刚刚类的结束前添加下面一行:

public $NewBodyContent; 

和回复功能都按:

Public function replyToMessage($id,$changeKey) 
    { 
     $ews = new ExchangeWebServices($this->server_url, $this->username, $this->password, ExchangeWebServices::VERSION_2010_SP1); 

     //$msg = new EWSType_ReplyAllToItemType(); 
     $msg = new EWSType_MessageType(); 

//In Case you need to add anyone in CC 
     $cc = new EWSType_ArrayOfRecipientsType(); 
     $cc->Mailbox = new EWSType_EmailAddressType(); 
     $cc->Mailbox->EmailAddress = 'emailaddresshere'; 
     $cc->Mailbox->Name = 'displaynamehere'; 
     $msg->CcRecipients = $cc; 

     $msg->ReferenceItemId = new EWSType_ItemIdType(); 
     $msg->ReferenceItemId->Id = $id; 
     $msg->ReferenceItemId->ChangeKey = $changeKey; 

     $msg->NewBodyContent = new EWSType_BodyType(); 
     $msg->NewBodyContent->BodyType = 'HTML'; 
     $msg->NewBodyContent->_ = 'HTML Content Goes Here'; 

     $msgRequest = new EWSType_CreateItemType(); 
     $msgRequest->Items = new EWSType_NonEmptyArrayOfAllItemsType(); 
     $msgRequest->Items->ReplyAllToItem = $msg; 
     $msgRequest->MessageDisposition = 'SendAndSaveCopy'; 
     $msgRequest->MessageDispositionSpecified = TRUE; 

     $response = $ews->CreateItem($msgRequest); 

     return $response->ResponseMessages->CreateItemResponseMessage->ResponseCode; 

    } 

这将发出一个回复到指定的ID和ChangeKey

1

您不能简单地发送一封新邮件到您要回复的邮件的回复地址吗?

https://github.com/jamesiarmes/php-ews/wiki/Email:-Send-Email

将受到Re: <subject of previous message>

,然后简单地包括响应的身体下方的原始电子邮件的正文?

+0

嘿bencoder,感谢您的及时响应。有没有其他办法可以做到这一点...我不想手动包含以前电子邮件的正文! – Guns

+1

我不知道是否有另一种方法,因为我不知道php-ews,这只是一个想法/建议,可以帮助您前进。我怀疑有任何特定的功能可以自动包含上一个主体。这不会有意义,因为这将是一个依赖于客户端的功能。 – bencoder