Php 发送带有附件的电子邮件时出现问题

Php 发送带有附件的电子邮件时出现问题,php,soap,exchange-server,Php,Soap,Exchange Server,我不熟悉使用Exchangeclient类中的EWS 我正在寻找一个简单的例子,如何发送带有附件的电子邮件。我找到了一些关于如何发送电子邮件但不发送带有附件的电子邮件的示例 这是我的剧本: $exchangeclient = new Exchangeclient(); $exchangeclient->init($username, $password, NULL, 'ews/Services.wsdl'); $exchangeclient->send_message($mail_f

我不熟悉使用Exchangeclient类中的EWS

我正在寻找一个简单的例子,如何发送带有附件的电子邮件。我找到了一些关于如何发送电子邮件但不发送带有附件的电子邮件的示例

这是我的剧本:

$exchangeclient = new Exchangeclient();
$exchangeclient->init($username, $password, NULL, 'ews/Services.wsdl');
$exchangeclient->send_message($mail_from, $subject, $body, 'HTML', true, true);
我有以下soap请求

    $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”

要发送带有附件的电子邮件,您必须首先创建没有任何收件人的邮件(项目)(以及“SendToNone”之类的邮件处置),并将其保存在草稿文件夹中。然后为CreateAttachment创建一个请求,如下所示,$key是您先前创建的项的changekey(您必须读回服务器响应并将changekey保存在某个位置,因为changekey会随着项的每次修改而更改):

然后更新消息(使用UpdateItem)以包含收件人,从而使消息配置类似于SendToAllAndSaveCopy

(免责声明:我现在正在使用此方法,它工作正常,除了识别
附件->文件附件->内容的正确格式,它看起来应该是附件的编码base64数据,但我的计算机无法打开我发送的附件。)

无论如何,我相信这是一种方法,当然,我已经能够发送带有附件的邮件

$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);