2011-06-06 27 views
0

我是使用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例外:一:ErrorSchemaValidation]請求失敗架構驗證:所需要的屬性「ID」缺失。

回答

2

爲了用附件發送電子郵件,您必須首先創建沒有任何收件人的郵件(郵件)(以及MessageDisposition爲「SendToNone」或類似內容),並將其保存在您的草稿文件夾中。然後創建一個CreateAttachment的請求,就像這樣,其中$ key是您之前創建的項目的changekey(您必須讀回服務器響應並將changekey保存在某個地方,因爲每次修改項目時changekey都會發生變化):

$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數據,但是我的電腦不能打開我發送的附件。)

無論如何,我相信這是做到這一點的方法,當然我也可以用附件發送消息。