Поделиться через


Добавление вложений с помощью EWS в Exchange

Узнайте, как создавать новые элементы с вложениями или добавлять вложения к существующим элементам с помощью управляемого API EWS или EWS в Exchange.

Вложения файлов или вложения элементов можно добавлять в новые или существующие элементы с помощью управляемого API EWS или EWS. Если вы используете управляемый API EWS, вы используете тот же метод для добавления вложений в новые или существующие элементы. однако метод изменяется, если вы используете вложение файла или элемента. И наоборот, если вы используете EWS, вы используете ту же операцию для добавления файла или вложения элемента в элемент, но операция меняется, если вы добавляете вложение в новый или существующий элемент.

Таблица 1. Методы управляемого API EWS и операции EWS для добавления вложений

Задача Метод управляемого API EWS Операция EWS
Добавление вложения файла в новое или существующее сообщение электронной почты
AttachmentCollection.AddFileAttachment
CreateItem для нового сообщения электронной почты
CreateAttachment для добавления в существующее сообщение электронной почты
Добавление вложения элемента в новое или существующее сообщение электронной почты
AttachmentCollection.AddItemAttachment
CreateItem для нового сообщения электронной почты
CreateAttachment для добавления в существующее сообщение электронной почты

Создание сообщения электронной почты с вложениями файлов и элементов с помощью управляемого API EWS

В следующем примере кода показано, как создать сообщение электронной почты с несколькими вложениями файлов и вложением элемента с помощью:

  1. Использование объекта EmailMessage для создания сообщения электронной почты.

  2. Использование методов AttachmentCollection.AddFileAttachment и AttachmentCollection.AddItemAttachment для добавления вложений в сообщение.

  3. Использование метода EmailMessage.SendAndSaveCopy для отправки сообщения получателям и сохранения сообщения в папке Отправленные.

В этом примере кода показаны четыре способа добавления файла в элемент с помощью управляемого API EWS:

  • С помощью полного расположения файла.

  • Используя полное расположение файла и новое имя вложения.

  • С помощью массива байтов.

  • С помощью потока.

Обратите внимание, что вложение элемента в этом примере создается одновременно с сообщением электронной почты. Сведения о добавлении существующего сообщения электронной почты в качестве вложения элемента см. в статье Добавление существующего элемента в новое сообщение электронной почты с помощью MimeContent и Управляемого API EWS.

В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.

public static void CreateEmailWithAttachments(ExchangeService service)
{
    // Create an email message and set properties on the message.
    EmailMessage message = new EmailMessage(service);
    // Set properties on the email message.
    message.Subject = "Message with Attachments";
    message.Body = "This message contains four file attachments 
        and one message item attachment.";
    message.ToRecipients.Add("sadie@contoso.com");
    message.ToRecipients.Add("ronnie@contoso.com");
    // Add a file attachment by using the fully qualified location of the file. 
    message.Attachments.AddFileAttachment("C:\\temp\\FileAttachment.txt");
    // Add a file attachment by using the fully qualified string name, 
    // and specify the name of the attachment as it will appear in the email.
    // The new name of the file attachment is SecondAttachment.txt.
    message.Attachments.AddFileAttachment("SecondAttachment.txt", "C:\\temp\\FileAttachment2.txt");
    // Add a file attachment by using a byte array.
    // In this example, theBytes is the byte array that represents the content of the image file to attach.
    byte[] theBytes = File.ReadAllBytes("C:\\Temp\\Tulips.jpg");
    // The byte array file attachment is named ThirdAttachment.jpg.
    message.Attachments.AddFileAttachment("ThirdAttachment.jpg", theBytes);
    // Add a file attachment by using a stream.
    FileStream theStream = new FileStream("C:\\temp\\FileAttachment4.txt", FileMode.OpenOrCreate);
    // The streamed file attachment is named FourthAttachment.txt.
    message.Attachments.AddFileAttachment("FourthAttachment.txt", theStream);
    // Add an email message as an item attachment and set properties on the item.
    ItemAttachment<EmailMessage> itemAttachment = message.Attachments.AddItemAttachment<EmailMessage>();
    itemAttachment.Name = "Attached Message Item";
    itemAttachment.Item.Subject = "Message Item Subject";
    itemAttachment.Item.Body = "Message Item Body";
    itemAttachment.Item.ToRecipients.Add("sadie@contoso.com");
    itemAttachment.Item.ToRecipients.Add("ronnie@contoso.com");
    // Send the mail and save a copy in the Sent Items folder.
    // This method results in a CreateItem and SendItem call to EWS.
    message.SendAndSaveCopy();
}

Создание сообщения электронной почты с вложениями файлов и элементов с помощью EWS

В следующем примере кода показано, как использовать операцию CreateItem для создания сообщения электронной почты с четырьмя вложениями файлов и одним вложением элементов. Это также один из XML-запросов, которые управляемый API EWS отправляет при создании сообщения электронной почты с вложениями файлов и элементов.

Обратите внимание, что вложение элемента в этом примере создается одновременно с сообщением электронной почты. Сведения о добавлении существующего сообщения электронной почты в качестве вложения элемента см. в статье Добавление существующего элемента в новое сообщение электронной почты с помощью MimeContent и Управляемого API EWS.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem MessageDisposition="SaveOnly">
      <m:Items>
        <t:Message>
          <t:Subject>Message with Attachments</t:Subject>
          <t:Body BodyType="HTML">This message contains four file attachments 
              and one message item attachment.</t:Body>
          <t:Attachments>
            <t:FileAttachment>
              <t:Name>FileAttachment.txt</t:Name>
              <t:IsInline>false</t:IsInline>
              <t:IsContactPhoto>false</t:IsContactPhoto>
              <t:Content>VGhpcyBpcyBhIGZpbGUgYXR0YWNobWVudC4=</t:Content>
            </t:FileAttachment>
            <t:FileAttachment>
              <t:Name>SecondAttachment.txt</t:Name>
              <t:IsInline>false</t:IsInline>
              <t:IsContactPhoto>false</t:IsContactPhoto>
              <t:Content>VGhpcyBpcyB0aGUgc2Vjb25kIGZpbGUgYXR0YWNobWVudC4=</t:Content>
            </t:FileAttachment>
            <t:FileAttachment>
              <t:Name>ThirdAttachment.jpg</t:Name>
              <t:IsInline>false</t:IsInline>
              <t:IsContactPhoto>false</t:IsContactPhoto>
              <t:Content>nAoAXNIZMVEZs5GKhdzRcLH/9k=</t:Content>
            </t:FileAttachment>
            <t:FileAttachment>
              <t:Name>FourthAttachment.txt</t:Name>
              <t:IsInline>false</t:IsInline>
              <t:IsContactPhoto>false</t:IsContactPhoto>
              <t:Content>obWVudC4=…</t:Content>
            </t:FileAttachment>
            <t:ItemAttachment>
              <t:Name>Attached Message Item</t:Name>
              <t:IsInline>false</t:IsInline>
              <t:Message>
                <t:Subject>Message Item Subject</t:Subject>
                <t:Body BodyType="HTML">Message Item Body</t:Body>
                <t:ToRecipients>
                  <t:Mailbox>
                    <t:EmailAddress>sadie@contoso.com</t:EmailAddress>
                  </t:Mailbox>
                  <t:Mailbox>
                    <t:EmailAddress>mack@contoso.com</t:EmailAddress>
                  </t:Mailbox>
                </t:ToRecipients>
              </t:Message>
            </t:ItemAttachment>
          </t:Attachments>
          <t:ToRecipients>
            <t:Mailbox>
              <t:EmailAddress>sadie@contoso.com</t:EmailAddress>
            </t:Mailbox>
            <t:Mailbox>
              <t:EmailAddress>ronnie@contoso.com</t:EmailAddress>
            </t:Mailbox>
          </t:ToRecipients>
        </t:Message>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Сервер отвечает на запрос CreateItem сообщением CreateItemResponse , которое содержит значение ResponseCodeNoError, указывающее, что сообщение электронной почты и вложения успешно созданы. В ответ также включаются itemId созданного сообщения и значения AttachmentId для каждого из вложений. Значения некоторых атрибутов сокращены для удобства чтения.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="939"
                         MinorBuildNumber="12"
                         Version="V2_11"
                         xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:CreateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                          xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:CreateItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Items>
            <t:Message>
              <t:ItemId Id="upV4AAA="
                        ChangeKey="CQAAABYAAAAFI5DJmZv+TLtyLOLIF1S5AAAXuktU" />
              <t:Attachments>
                <t:FileAttachment>
                  <t:AttachmentId Id="6ts3NuI=" />
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="gOIZx1I=" />
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="esRan5I=" />
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="t7sU6s=" />
                </t:FileAttachment>
                <t:ItemAttachment>
                  <t:AttachmentId Id="XgDCggM=" />
                </t:ItemAttachment>
              </t:Attachments>
            </t:Message>
          </m:Items>
        </m:CreateItemResponseMessage>
      </m:ResponseMessages>
    </m:CreateItemResponse>
  </s:Body>
</s:Envelope>

Чтобы отправить это только что созданное сообщение, вызовите операцию SendItem .

Добавление существующего элемента в новое сообщение электронной почты с помощью MimeContent и управляемого API EWS

Чтобы добавить существующий элемент в качестве вложения к другому элементу, необходимо создать новое вложение элемента и скопировать содержимое существующего элемента в новый элемент. Это можно сделать двумя способами:

  1. Если вы работаете с сообщениями электронной почты в частности, вы можете скопировать значение свойства MimeContent из сообщения электронной почты в только что созданное вложение элемента. В ходе этого процесса вы потеряете некоторые свойства, такие как флаги и категории, но они отлично подходят для стандартных сообщений электронной почты.

  2. Если вам нужна полная точность для всех типов элементов, можно привязать к существующему элементу и скопировать все свойства и расширенные свойства в новое вложение.

В следующем примере кода показан первый подход к копированию MimeContent во вложение нового элемента. Ниже приведена процедура, которая показывает, как можно изменить код для использования второго подхода.

В этом примере предполагается, что служба является допустимым объектом ExchangeService и что пользователь прошел проверку подлинности на сервере Exchange Server, а itemId — это ItemId элемента, который необходимо присоединить.

public static void CreateEmailExistingItem(ExchangeService service, ItemId itemId)
{        
    // This method results in a GetItem call to EWS.
    EmailMessage msgToAttach = EmailMessage.Bind(service,itemId, 
        new PropertySet(ItemSchema.MimeContent, ItemSchema.Subject));
    // Create an email message and set properties on the message.
    EmailMessage message = new EmailMessage(service);
    message.Subject = "Message with Item Attachment (MimeContent)";
    message.Body = "The attachment to this message was created by copying
        the MimeContent from the original message and adding it to a new item attachment.";
    message.ToRecipients.Add("sadie@contoso.com");
    // Add an email message item attachment and set properties on the item.
    ItemAttachment<EmailMessage> itemAttachment = message.Attachments.AddItemAttachment<EmailMessage>();
    itemAttachment.Item.MimeContent = msgToAttach.MimeContent;
    itemAttachment.Name = msgToAttach.Subject;
    // Send the mail and save a copy in the Sent Items folder.
    // This method results in a CreateItem and SendItem call to EWS.
    message.SendAndSaveCopy();
}

Чтобы изменить этот пример для копирования каждого из свойств существующего элемента во вложение нового элемента, сделайте следующее:

  1. Измените набор свойств, чтобы включить PropertySet.FirstClassProperties и все необходимые дополнительные или расширенные свойства.
// Add additional properties to the PropertySet.
EmailMessage msgToAttach = EmailMessage.Bind(service, itemId, new PropertySet(PropertySet.FirstClassProperties));
  1. Удалите следующую строку, так как свойство MimeContent не требуется.
itemAttachment.Item.MimeContent = msgToAttach.MimeContent;
  1. Повторите эту строку для каждого свойства, чтобы скопировать существующий элемент в новое вложение. Не копируйте ItemId во вложение нового элемента, так как это свойство доступно только для чтения.
itemAttachment.Item.Subject = msgToAttach.Subject;
  1. Задайте для свойства PidTagMessageFlags (0x0E070003) вложении значение Отправлено.
ExtendedPropertyDefinition sent = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
msgToAttach.Item.SetExtendedProperty(sent, "1");

Добавление существующего элемента в новое сообщение электронной почты с помощью MimeContent и EWS

Добавить существующий элемент в новый элемент можно двумя способами:

  1. Если вы работаете с сообщениями электронной почты, вы можете скопировать значение элемента MimeContent из сообщения электронной почты во вложение созданного элемента. В ходе этого процесса вы потеряете некоторые свойства, такие как флаги и категории, но они отлично подходят для стандартных сообщений электронной почты.

  2. Если вам нужна полная точность для всех типов элементов, можно привязать к существующему элементу и скопировать все свойства и расширенные свойства в новое вложение.

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

  1. GetItem — получение mimeContent и Subject сообщения, которое станет вложением элемента в новом сообщении.

  2. CreateItem — создание сообщения электронной почты.

  3. CreateAttachment — создание нового вложения с помощью MimeContent и Subject , полученных операцией GetItem .

  4. SendItem — отправка и сохранение сообщения.

Пример начинается с получения MimeContent и Subject существующего элемента.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <m:GetItem>
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:MimeContent" />
          <t:FieldURI FieldURI="item:Subject" />
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:ItemIds>
        <t:ItemId Id="jCrTAAA=" />
      </m:ItemIds>
    </m:GetItem>
  </soap:Body>
</soap:Envelope>

Сервер отвечает на запрос GetItemсообщением GetItemResponse , которое содержит значение ResponseCodeNoError, указывающее, что сообщение электронной почты было успешно получено, а также MimeContent и Subject сообщения электронной почты.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="944"
                         MinorBuildNumber="11"
                         Version="V2_12"
                         xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                       xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:GetItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Items>
            <t:Message>
              <t:MimeContent CharacterSet="UTF-8">tDQe/Eo=…</t:MimeContent>
              <t:ItemId Id="jCrTAAA="
                        ChangeKey="CQAAABYAAAAFI5DJmZv+TLtyLOLIF1S5AAAZi+7u" />
              <t:Subject>Play tennis?</t:Subject>
            </t:Message>
          </m:Items>
        </m:GetItemResponseMessage>
      </m:ResponseMessages>
    </m:GetItemResponse>
  </s:Body>
</s:Envelope>

Затем вызовите операцию CreateItem , чтобы создать сообщение электронной почты.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem MessageDisposition="SaveOnly">
      <m:Items>
        <t:Message>
          <t:Subject>Message with Item Attachment (MimeContent)</t:Subject>
          <t:Body BodyType="HTML">The attachment to this message was created by copying the MimeContent from the original message and adding it to a new item attachment.</t:Body>
          <t:ToRecipients>
            <t:Mailbox>
              <t:EmailAddress>primary@contoso1000.onmicrosoft.com</t:EmailAddress>
            </t:Mailbox>
          </t:ToRecipients>
        </t:Message>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Сервер отвечает на запрос CreateItem сообщением CreateItemResponse , которое содержит значение ResponseCodeNoError, указывающее, что сообщение электронной почты было создано успешно.

Затем создайте вложение элемента с помощью mimeContent и Subject , полученных операцией GetItem . Значение элемента ParentItemId заполняется с помощью значения ItemId , возвращенного в ответе CreateItem .

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:CreateAttachment>
      <m:ParentItemId Id="jDKsAAA=" />
      <m:Attachments>
        <t:ItemAttachment>
          <t:Name>Play tennis?</t:Name>
          <t:IsInline>false</t:IsInline>
          <t:Message>
            <t:MimeContent CharacterSet="UTF-8">tDQe/Eo=…</t:MimeContent>
          </t:Message>
        </t:ItemAttachment>
      </m:Attachments>
    </m:CreateAttachment>
  </soap:Body>
</soap:Envelope>

Сервер отвечает на запрос CreateAttachment сообщением CreateAttachmentResponse , которое содержит значение ResponseCodeNoError, указывающее, что вложение было успешно создано, и AttachmentId только что созданного вложения.

Теперь, когда новое сообщение создано и элемент был присоединен, его можно отправить , вызвав операцию SendItem .

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:SendItem SaveItemToFolder="true">
      <m:ItemIds>
        <t:ItemId Id="jDKsAAA="
                  ChangeKey="CQAAABYAAAAFI5DJmZv+TLtyLOLIF1S5AAAZi/q/" />
      </m:ItemIds>
      <m:SavedItemFolderId>
        <t:DistinguishedFolderId Id="sentitems" />
      </m:SavedItemFolderId>
    </m:SendItem>
  </soap:Body>
</soap:Envelope>

Сервер отвечает на запрос SendItem сообщением SendItemResponse , которое содержит значение ResponseCodeNoError, указывающее, что сообщение электронной почты отправлено успешно.

Создание сообщения электронной почты со встроенным вложением с помощью управляемого API EWS

В следующем примере кода показано, как создать сообщение электронной почты со встроенным вложением с помощью:

  1. Использование объекта EmailMessage для создания сообщения электронной почты.

  2. Присвойте свойству EmailMessage.Body текст HTML, включающий встроенное вложение.

  3. Использование метода AttachmentCollection.AddFileAttachment для добавления вложения в сообщение.

  4. Использование метода EmailMessage.SendAndSaveCopy для отправки сообщения получателю и сохранения сообщения в папке Отправленные.

В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.

public static void CreateEmailWithInlineAttachment(ExchangeService service)
{
    // Create the HTML body with the content identifier of the attachment.
    string html = @"<html>
                        <head>
                        </head>
                        <body>
                        <img width=100 height=100 id=""1"" src=""cid:Party.jpg"">
                        </body>
                        </html>";
         
    // Create the email message.
    EmailMessage message = new EmailMessage(service);
    message.Subject = "Inline Attachment";
    message.Body = new MessageBody(BodyType.HTML, html);
    message.ToRecipients.Add("sadie@contoso.com");
    // Add the attachment to the local copy of the email message.
    string file = @"C:\Temp\Party.jpg";
    message.Attachments.AddFileAttachment("Party.jpg", file);
    message.Attachments[0].IsInline = true;
    message.Attachments[0].ContentId = "Party.jpg";
         
    // Send the mail and save a copy in the Sent Items folder.
    // This method results in a CreateItem and SendItem call to EWS.
    message.SendAndSaveCopy();
}

Создание сообщения электронной почты со встроенным вложением с помощью EWS

В следующем примере кода показано, как использовать операцию CreateItem для создания сообщения электронной почты со встроенным вложением файла. Атрибут BodyType элемента Body указывает, что содержимое имеет формат HTML и включает источник изображения. Это также один из XML-запросов, которые отправляет управляемый API EWS при использовании управляемого API EWS для создания сообщения электронной почты со встроенным вложением.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem MessageDisposition="SaveOnly">
      <m:Items>
        <t:Message>
          <t:Subject>Inline Attachment</t:Subject>
          <t:Body BodyType="HTML">
            &amp;lt;html&amp;gt;
            &amp;lt;head&amp;gt;
            &amp;lt;/head&amp;gt;
            &amp;lt;body&amp;gt;
            &amp;lt;img width=100 height=100 id="1" src="cid:Party.jpg"&amp;gt;
            &amp;lt;/body&amp;gt;
            &amp;lt;/html&amp;gt;
          </t:Body>
          <t:ToRecipients>
            <t:Mailbox>
              <t:EmailAddress>sadie@contoso.com</t:EmailAddress>
            </t:Mailbox>
          </t:ToRecipients>
        </t:Message>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

В ответ на запрос CreateItem сервер отправляет сообщение CreateItemResponse, включающее параметр ResponseCode со значением NoError, которое указывает, что сообщение было успешно создано, и свойство ItemId созданного сообщения.

Чтобы отправить это только что созданное сообщение, вызовите операцию SendItem .

Добавление вложения в существующее сообщение электронной почты с помощью управляемого API EWS

В следующем примере кода показано, как добавить вложение в существующее сообщение электронной почты с помощью:

  1. Использование метода EmailMessage.Bind для привязки к существующему сообщению электронной почты.

  2. Добавление вложения файла в сообщение с помощью метода AddFileAttachment .

  3. Сохранение обновлений путем вызова метода EmailMessage.Update .

В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.

public static void AddAttachmentToExisting(ExchangeService service, ItemId itemId)
{
    // This method results in a GetItem call to EWS.
    EmailMessage message = EmailMessage.Bind(service, itemId);
    message.Attachments.AddFileAttachment("C:\\temp\\FileAttachment.txt");
    // This method results in a CreateAttachment call to EWS.
    message.Update(ConflictResolutionMode.AlwaysOverwrite);
}

Добавление вложения в существующее сообщение электронной почты с помощью EWS

В следующем примере кода показано, как использовать операцию CreateAttachment для добавления вложения файла в существующее сообщение электронной почты. Это также один из XML-запросов, которые отправляет управляемый API EWS при использовании управляемого API EWS для добавления вложения в существующее сообщение электронной почты.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Central Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:CreateAttachment>
      <m:ParentItemId Id="uqE2AAA=" />
      <m:Attachments>
        <t:FileAttachment>
          <t:Name>FileAttachment.txt</t:Name>
          <t:Content>VGhpcyBpcyBhIGZpbGUgYXR0YWNobWVudC4=</t:Content>
        </t:FileAttachment>
      </m:Attachments>
    </m:CreateAttachment>
  </soap:Body>
</soap:Envelope>

Сервер отвечает на запрос CreateAttachment сообщением CreateAttachmentResponse , которое содержит значение ResponseCodeNoError, указывающее, что вложение было успешно создано, и AttachmentId только что созданного вложения.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="939"
                         MinorBuildNumber="12"
                         Version="V2_11"
                         xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:CreateAttachmentResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                                xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:CreateAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Attachments>
            <t:FileAttachment>
              <t:AttachmentId Id="yRLhCh8="
                              RootItemId="uqE2AAA="
                              RootItemChangeKey="CQAAABYAAAAFI5DJmZv+TLtyLOLIF1S5AAAXulcf" />
            </t:FileAttachment>
          </m:Attachments>
        </m:CreateAttachmentResponseMessage>
      </m:ResponseMessages>
    </m:CreateAttachmentResponse>
  </s:Body>
</s:Envelope>

См. также