繁体   English   中英

发送带有附件的 email 时出现问题

[英]problem sending email with attachment

我是从 Exchangeclient 类中使用 EWS 的新手。

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

这是我的脚本:

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

为了发送带有附件的 email,您必须首先创建没有任何收件人的消息(项目)(以及“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 数据 - 但我的电脑可以不要打开我发送的附件。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM