jamesiarmes / php-ews

PHP Exchange Web Services
http://jamesarmes.com/php-ews/
MIT License
567 stars 302 forks source link

How to forward mail with php-ews #569

Open previajoemal opened 4 years ago

previajoemal commented 4 years ago

I'll try to forward a mail with php-ews, but can't get it to work.

I have read the documentation for XML EWS

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-respond-to-email-messages-by-using-ews-in-exchange

but I'll guess I've missed something.

$request = new CreateItemType(); $request->MessageDisposition = MessageDispositionType::SEND_AND_SAVE_COPY; $request->Items = new NonEmptyArrayOfAllItemsType(); $request->Items->ForwardedItem = new ForwardItemType(); $request->Items->ForwardedItem->ToRecipients = new MessageType(); $request->Items->ForwardedItem->ToRecipients->Mailbox = new EmailAddressType(); $request->Items->ForwardedItem->ToRecipients->Mailbox->MailboxName = 'Foo Bar'; $request->Items->ForwardedItem->ToRecipients->Mailbox->MailboxAddress = 'Foo@Bar.com'; $request->Items->ForwardedItem->ReferenceItemId = new ItemIdType(); $request->Items->ForwardedItem->ReferenceItemId->Id = 'AAMk.....AAA='; $request->Items->ForwardedItem->ReferenceItemId->ChangeKey = 'CQAA.....GOP'; $request->Items->ForwardedItem->NewBodyContent = new BodyContentType(); $request->Items->ForwardedItem->NewBodyContent->Value = 'Test'; $request->Items->ForwardedItem->NewBodyContent->BodyType = BodyTypeType::HTML;

The error message I'll get is:

Fatal error: Uncaught SoapFault exception: [a:ErrorInvalidRequest] Id must be non-empty.

quantrpeter commented 4 years ago

i am stuck too

faktor009 commented 4 years ago

Hi, I see some activity here. I know for you @previajoemal it's too late, but I think someone can appreciate it the future especially you @quantrpeter . I don't know exactly where your problem is, but here is my tested working example. It's pretty same then your code, but maybe better structured, since almost everything in SOAP is object, I prefer this way to avoid stupid errors

$request = new CreateItemType();
$request->Items = new NonEmptyArrayOfAllItemsType();

$request->MessageDisposition = MessageDispositionType::SEND_AND_SAVE_COPY;

$forwardItem = new ForwardItemType();
$forwardItem->ReferenceItemId = new ItemIdType();

// ID of referenced item you would like to forward
$forwardItem->ReferenceItemId->Id = 'AAMk.....AAA=';

// Change key of referenced item
$forwardItem->ReferenceItemId->ChangeKey ='CQAA.....GOP';

// add a recipient
$mailbox= new EmailAddressType();
$mailbox->Name = 'John Smith';
$mailbox->EmailAddress = 'smith@ewsforwarding.com';

$forward->ToRecipients= new ArrayOfRecipientsType();

// you can add more Mailbox objects here, since it's array. 
// you can also replace ToRecipients with CcRecipients or BccRecipients to add copies. 
$forward->ToRecipients->Mailbox[]=$mailbox;

// here we add the body text 
$forwardItem->NewBodyContent = new BodyType();
$forwardItem->NewBodyContent->BodyType = BodyTypeType::HTML;
$forwardItem->NewBodyContent->_ ='Mail body text';

$request->Items->ForwardItem[] = $forwardItem;

$client= new Client($host,$username,$password,Client::VERSION_2016)

$response = $client->CreateItem($request);

Hope it helps