проблема при отправке письма с вложением - PullRequest
0 голосов
/ 06 июня 2011

Я новичок в использовании EWS из классов Exchangeclient.

Я ищу простой пример того, как отправить электронное письмо с вложением. Я нашел примеры того, как отправить электронное письмо, но не отправлять электронное письмо с вложением.

Это мой сценарий:

$exchangeclient = new Exchangeclient();
$exchangeclient->init($username, $password, NULL, 'ews/Services.wsdl');
$exchangeclient->send_message($mail_from, $subject, $body, 'HTML', true, true);

У меня следующий запрос на мыло.

    $CreateItem->MessageDisposition = "SendAndSaveCopy";
    $CreateItem->SavedItemFolderId->DistinguishedFolderId->Id = "sentitems";

    $CreateItem->Items->Message->ItemClass = "IPM.Note";
    $CreateItem->Items->Message->Subject = $subject;
    $CreateItem->Items->Message->Body->BodyType = $bodytype;
    $CreateItem->Items->Message->Body->_ = $content;
    $CreateItem->Items->Message->ToRecipients->Mailbox->EmailAddress = $to; 
$CreateItem->Items->Message->Attachments->FileAttachment->AttachmentId = $attach['AttachmentId'];
    $CreateItem->Items->Message->Attachments->FileAttachment->Name = $attach['Name'];
    $CreateItem->Items->Message->Attachments->FileAttachment->ContentType = $attach['ContentType'];
    $CreateItem->Items->Message->Attachments->FileAttachment->ContentId = $attach['AttachmentId'];
    $CreateItem->Items->Message->Attachments->FileAttachment->Content = $attach['ContentId'];
    $CreateItem->Items->Message->Attachments->FileAttachment->Size = $attach['Size']; 

Я получаю ошибку:

Неустранимая ошибка: необработанное исключение SoapFault: [a: ErrorSchemaValidation] Ошибка проверки схемы запроса: отсутствует обязательный атрибут Id

1 Ответ

2 голосов
/ 21 июля 2011

Чтобы отправить электронное письмо с вложением, вы должны сначала создать сообщение (элемент) без каких-либо получателей (и расположение сообщения «SendToNone» или что-то в этом роде) и сохранить его в папке «Черновики». Затем создайте запрос для CreateAttachment, например, где $ key - это ключ изменения элемента, который вы создали ранее (вы должны прочитать ответ сервера и сохранить ключ где-нибудь, потому что ключ изменения изменяется для элемента при каждой модификации, которой он подвергается. ):

$attachrequest->ParentItemId->ChangeKey = $key;
$attachrequest->Attachments->FileAttachment->Name = $attachment_name;
$attachrequest->Attachments->FileAttachment->ContentLocation = $attachment;
$attachrequest->Attachments->FileAttachment->Content = $attachment_content;
$attachrequest->Attachments->FileAttachment->ContentType = $attachment_contenttype;
$response = self::$ews->CreateAttachment($attachrequest); 

ТОГДА вы обновляете сообщение (с помощью элемента UpdateItem), чтобы включить в него получателей, и чтобы MessageDisposition был чем-то вроде SendToAllAndSaveCopy.

(Отказ от ответственности: я сейчас использую этот метод, и он все работает нормально, за исключением определения правильного формата для Attachments->FileAttachment->Content, который выглядит так, как будто это должны быть закодированные данные base64 вложения - но мой компьютер может ' не открывать вложения, которые я отправляю.)

Во всяком случае, я считаю, что это способ сделать это, и, конечно, я смог отправить сообщения с вложениями с ним.

...