Récupérer des pièces jointes à l’aide d’EWS dans Exchange

Découvrez comment créer des éléments avec des pièces jointes ou ajouter des pièces jointes à des éléments existants à l’aide de l’API managée EWS ou EWS dans Exchange.

Vous pouvez ajouter des pièces jointes ou des pièces jointes d’éléments à des éléments nouveaux ou existants à l’aide de l’API managée EWS ou EWS. Si vous utilisez l’API managée EWS, vous utilisez la même méthode pour ajouter des pièces jointes à des éléments nouveaux ou existants ; Toutefois, la méthode change si vous utilisez un fichier ou une pièce jointe d’élément. À l’inverse, si vous utilisez EWS, vous utilisez la même opération pour ajouter un fichier ou une pièce jointe d’élément à un élément, mais l’opération change si vous ajoutez la pièce jointe à un élément nouveau ou existant.

Tableau 1. Méthodes de l’API managée EWS et opérations EWS pour l’ajout de pièces jointes

Tâche Méthode d'API managée EWS Opération EWS
Ajouter une pièce jointe à un e-mail nouveau ou existant
AttachmentCollection.AddFileAttachment
CreateItem pour un nouvel e-mail
CreateAttachment à ajouter à un e-mail existant
Ajouter une pièce jointe d’élément à un e-mail nouveau ou existant
AttachmentCollection.AddItemAttachment
CreateItem pour un nouvel e-mail
CreateAttachment à ajouter à un e-mail existant

Créer un e-mail avec des pièces jointes de fichier et d’élément à l’aide de l’API managée EWS

L’exemple de code suivant montre comment créer un e-mail avec plusieurs pièces jointes et une pièce jointe d’élément par :

  1. Utilisation de l’objet EmailMessage pour créer un e-mail.

  2. Utilisation des méthodes AttachmentCollection.AddFileAttachment et AttachmentCollection.AddItemAttachment pour ajouter des pièces jointes au message.

  3. Utilisation de la méthode EmailMessage.SendAndSaveCopy pour envoyer le message aux destinataires et enregistrer le message dans le dossier Éléments envoyés.

Cet exemple de code montre les quatre façons dont une pièce jointe peut être ajoutée à un élément à l’aide de l’API managée EWS :

  • En utilisant un emplacement de fichier complet.

  • En utilisant un emplacement de fichier complet et un nouveau nom de pièce jointe.

  • À l’aide d’un tableau d’octets.

  • À l’aide d’un flux.

Notez que la pièce jointe de cet exemple est créée en même temps que le message électronique. Pour ajouter un message électronique existant en tant que pièce jointe d’élément, consultez Ajouter un élément existant à un nouvel e-mail à l’aide de MimeContent et de l’API managée EWS.

Cet exemple suppose que le service est un objetExchangeService valide et que l’utilisateur a bien été authentifié pour un serveur Exchange.

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();
}

Créer un e-mail avec des pièces jointes de fichiers et d’éléments à l’aide d’EWS

L’exemple de code suivant montre comment utiliser l’opération CreateItem pour créer un e-mail avec quatre pièces jointes et une pièce jointe d’élément. Il s’agit également de l’une des requêtes XML que l’API managée EWS envoie lorsque vous créez un e-mail avec des pièces jointes de fichier et d’élément.

Notez que la pièce jointe de cet exemple est créée en même temps que le message électronique. Pour ajouter un message électronique existant en tant que pièce jointe d’élément, consultez Ajouter un élément existant à un nouvel e-mail à l’aide de MimeContent et de l’API managée EWS.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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>

Le serveur répond à la requête CreateItem avec un message CreateItemResponse qui inclut la valeur ResponseCodeNoError, ce qui indique que l’e-mail et les pièces jointes ont été créés avec succès. Les valeurs ItemId du message nouvellement créé et AttachmentId pour chacune des pièces jointes sont également incluses dans la réponse. Les valeurs de certains attributs ont été raccourcies pour plus de lisibilité.

<?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="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://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="https://schemas.microsoft.com/exchange/services/2006/messages"
                          xmlns:t="https://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>

Pour envoyer ce message nouvellement créé, appelez l’opération SendItem .

Ajouter un élément existant à un nouvel e-mail à l’aide de MimeContent et de l’API managée EWS

Pour ajouter un élément existant en tant que pièce jointe à un autre élément, vous devez créer une nouvelle pièce jointe d’élément et copier le contenu de l’élément existant dans le nouvel élément. Il existe deux méthodes pour y parvenir :

  1. Si vous utilisez spécifiquement des messages électroniques, vous pouvez copier la valeur de la propriété MimeContent de l’e-mail dans la pièce jointe de l’élément nouvellement créé. Vous perdrez certaines propriétés pendant ce processus, telles que les indicateurs de suivi et les catégories, mais cela fonctionne très bien pour les messages électroniques standard.

  2. Si vous avez besoin d’une fidélité totale pour tous les types d’éléments, vous pouvez lier à un élément existant et copier toutes les propriétés et propriétés étendues dans la nouvelle pièce jointe.

L’exemple de code suivant montre la première approche, en copiant le MimeContent dans la nouvelle pièce jointe d’élément. Cet exemple est suivi d’une procédure qui montre comment vous pouvez modifier le code pour utiliser la deuxième approche.

Cet exemple suppose que le service est un objet ExchangeService valide et que l’utilisateur a été authentifié auprès d’un serveur Exchange, et que l’itemId est l’ItemId de l’élément à joindre.

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();
}

Pour modifier cet exemple afin de copier chacune des propriétés de l’élément existant dans la nouvelle pièce jointe d’élément, procédez comme suit :

  1. Modifiez le jeu de propriétés pour inclure PropertySet.FirstClassProperties et toutes les propriétés supplémentaires ou propriétés étendues dont vous avez besoin.
// Add additional properties to the PropertySet.
EmailMessage msgToAttach = EmailMessage.Bind(service, itemId, new PropertySet(PropertySet.FirstClassProperties));
  1. Supprimez la ligne suivante, car vous n’avez pas besoin de la propriété MimeContent .
itemAttachment.Item.MimeContent = msgToAttach.MimeContent;
  1. Répétez cette ligne pour chaque propriété à copier de l’élément existant vers la nouvelle pièce jointe. Ne copiez pas l’ItemId dans la nouvelle pièce jointe d’élément, car il s’agit d’une propriété en lecture seule.
itemAttachment.Item.Subject = msgToAttach.Subject;
  1. Définissez la propriété PidTagMessageFlags (0x0E070003) sur la pièce jointe sur Envoyé.
ExtendedPropertyDefinition sent = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
msgToAttach.Item.SetExtendedProperty(sent, "1");

Ajouter un élément existant à un nouvel e-mail à l’aide de MimeContent et d’EWS

Il existe deux façons d’ajouter un élément existant à un nouvel élément :

  1. Si vous utilisez spécifiquement des messages électroniques, vous pouvez copier la valeur de l’élément MimeContent de l’e-mail dans la pièce jointe de l’élément nouvellement créé. Vous perdrez certaines propriétés pendant ce processus, telles que les indicateurs de suivi et les catégories, mais cela fonctionne très bien pour les messages électroniques standard.

  2. Si vous avez besoin d’une fidélité totale pour tous les types d’éléments, vous pouvez lier à un élément existant et copier toutes les propriétés et propriétés étendues dans la nouvelle pièce jointe.

L’exemple de code suivant montre comment utiliser l’élément MimeContent pour copier le contenu de l’élément d’origine dans la valeur MimeContent de la nouvelle pièce jointe. L’exemple utilise les opérations suivantes :

  1. GetItem : pour obtenir le MimeContent et l’objet du message qui deviendra la pièce jointe de l’élément sur le nouveau message.

  2. CreateItem : pour créer le nouveau message électronique.

  3. CreateAttachment : pour créer la nouvelle pièce jointe, à l’aide de MimeContent et Subject récupérés par l’opération GetItem .

  4. SendItem : pour envoyer et enregistrer le message.

L’exemple commence par récupérer le MimeContent et le Subject de l’élément existant.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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>

Le serveur répond à la requête GetItem avec un message GetItemResponse qui inclut la valeur ResponseCodeNoError, qui indique que l’e-mail a été récupéré avec succès, ainsi que le MimeContent et l’objet de l’e-mail.

<?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="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://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="https://schemas.microsoft.com/exchange/services/2006/messages"
                       xmlns:t="https://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>

Ensuite, appelez l’opération CreateItem pour créer l’e-mail.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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>

Le serveur répond à la requête CreateItem avec un message CreateItemResponse qui inclut la valeur ResponseCodeNoError, ce qui indique que l’e-mail a été créé avec succès.

Ensuite, créez la nouvelle pièce jointe d’élément à l’aide de MimeContent et Subject récupérés par l’opération GetItem . La valeur de l’élément ParentItemId est remplie à l’aide de la valeur ItemId retournée dans la réponse CreateItem .

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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>

Le serveur répond à la demande CreateAttachment avec un message CreateAttachmentResponse qui inclut la valeur ResponseCodeNoError, ce qui indique que la pièce jointe a été créée avec succès, et l’AttachmentId de la pièce jointe nouvellement créée.

Maintenant que le nouveau message a été créé et que l’élément a été joint, vous pouvez envoyer ce message nouvellement créé en appelant l’opération SendItem .

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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>

Le serveur répond à la requête SendItem avec un message SendItemResponse qui inclut la valeur ResponseCodeNoError, ce qui indique que l’e-mail a été envoyé avec succès.

Créer un e-mail avec une pièce jointe inline à l’aide de l’API managée EWS

L’exemple de code suivant montre comment créer un e-mail avec une pièce jointe inline en :

  1. Utilisation de l’objet EmailMessage pour créer un e-mail.

  2. Définition de la propriété EmailMessage.Body sur un corps HTML qui inclut une pièce jointe inline.

  3. Utilisation de la méthode AttachmentCollection.AddFileAttachment pour ajouter la pièce jointe au message.

  4. Utilisation de la méthode EmailMessage.SendAndSaveCopy pour envoyer le message au destinataire et enregistrer le message dans le dossier Éléments envoyés.

Cet exemple suppose que le service est un objetExchangeService valide et que l’utilisateur a bien été authentifié pour un serveur Exchange.

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();
}

Créer un e-mail avec une pièce jointe inline à l’aide d’EWS

L’exemple de code suivant montre comment utiliser l’opération CreateItem pour créer un e-mail avec une pièce jointe de fichier inline. L’attribut BodyType de l’élément Body indique que le contenu est au format HTML et inclut la source de l’image. Il s’agit également de l’une des requêtes XML que l’API managée EWS envoie lorsque vous utilisez l’API managée EWS pour créer un e-mail avec une pièce jointe inline.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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>

Le serveur répond à la demandeCreateItem par un message GetItemResponse, qui inclut ResponseCode renvoyant la valeur NoError, indiquant que le message a bien été créé, et où apparaît l’élément ItemId du nouveau message.

Pour envoyer ce message nouvellement créé, appelez l’opération SendItem .

Ajouter une pièce jointe à un e-mail existant à l’aide de l’API managée EWS

L’exemple de code suivant montre comment ajouter une pièce jointe à un e-mail existant par :

  1. Utilisation de la méthode EmailMessage.Bind pour établir une liaison à un message électronique existant.

  2. Ajout d’une pièce jointe au message à l’aide de la méthode AddFileAttachment .

  3. Enregistrement des mises à jour en appelant la méthode EmailMessage.Update .

Cet exemple suppose que le service est un objetExchangeService valide et que l’utilisateur a bien été authentifié pour un serveur Exchange.

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

Ajouter une pièce jointe à un e-mail existant à l’aide d’EWS

L’exemple de code suivant montre comment utiliser l’opération CreateAttachment pour ajouter une pièce jointe à un message électronique existant. Il s’agit également de l’une des requêtes XML que l’API managée EWS envoie lorsque vous utilisez l’API managée EWS pour ajouter une pièce jointe à un e-mail existant.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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>

Le serveur répond à la demande CreateAttachment avec un message CreateAttachmentResponse qui inclut la valeur ResponseCodeNoError, ce qui indique que la pièce jointe a été créée avec succès, et l’AttachmentId de la pièce jointe nouvellement créée.

<?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="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://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="https://schemas.microsoft.com/exchange/services/2006/messages"
                                xmlns:t="https://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>

Voir aussi