【问题标题】:problem sending email with attachment发送带附件的电子邮件的问题
【发布时间】:2011-06-06 16:07:37
【问题描述】:

我刚开始使用 Exchangeclient 类中的 EWS。

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

这是我的脚本:

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

【问题讨论】:

    标签: php soap exchange-server


    【解决方案1】:

    为了发送带有附件的电子邮件,您必须首先创建没有任何收件人的消息(项目)(以及“SendToNone”或类似的 MessageDisposition)并将其保存在您的草稿文件夹中。然后创建一个对 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 数据——但我的电脑可以'不要打开我发送的附件。)

    无论如何,我相信这是这样做的方法,当然我已经能够发送带有附件的消息。

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2015-08-28
      • 2019-12-24
      • 2014-04-23
      • 2019-03-09
      • 2015-09-09
      • 1970-01-01
      相关资源
      最近更新 更多