Envoyer des messages électroniques à l’aide d’EWS dans Exchange
Découvrez comment envoyer des messages électroniques nouveaux ou brouillons, ou envoyer un e-mail retardé à l’aide de l’API managée EWS ou EWS dans Exchange.
Que vous utilisiez l’API managée EWS ou EWS, vous pouvez envoyer des messages électroniques de deux manières. Vous pouvez envoyer un message existant, tel qu’un message stocké dans votre dossier Brouillons, ou créer et envoyer un e-mail en une seule étape. Les méthodes et les opérations que vous utilisez pour envoyer le message sont les mêmes que vous envoyiez un message immédiatement ou que vous envoyiez un message différé.
Tableau 1. Méthodes d’API managée EWS et opérations EWS pour l’envoi de messages électroniques
Tâche | Méthode d'API managée EWS | Opération EWS |
---|---|---|
Envoyer un nouveau message électronique |
EmailMessage.SendAndSaveCopy |
CreateItem |
Envoyer un e-mail existant |
EmailMessage.Send |
SendItem |
Envoyer un nouveau message électronique à l’aide de l’API managée EWS
L’exemple de code suivant montre comment utiliser l’objet EmailMessage pour créer un message électronique et la méthode 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.
// Create an email message and provide it with connection
// configuration information by using an ExchangeService object named service.
EmailMessage message = new EmailMessage(service);
// Set properties on the email message.
message.Subject = "Company Soccer Team";
message.Body = "Are you interested in joining?";
message.ToRecipients.Add("sadie@contoso.com");
// Send the email message and save a copy.
// This method call results in a CreateItem call to EWS.
message.SendAndSaveCopy();
Console.WriteLine("An email with the subject '" + message.Subject + "' has been sent to '" + message.ToRecipients[0] + "' and saved in the SendItems folder.");
Envoyer un nouveau message électronique à l’aide d’EWS
L’exemple de code suivant montre comment utiliser l’opération CreateItem avec une valeur MessageDisposition de SendAndSaveCopy pour créer un message électronique, envoyer le message au destinataire et enregistrer le message dans le dossier Éléments envoyés. Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous envoyez un nouveau message électronique.
<?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="SendAndSaveCopy">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</m:SavedItemFolderId>
<m:Items>
<t:Message>
<t:Subject>Company Soccer Team</t:Subject>
<t:Body BodyType="HTML">Are you interested in joining?</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.
Envoyer un brouillon de message électronique à l’aide de l’API managée EWS
L’exemple de code suivant montre comment envoyer un message stocké dans le dossier Brouillons, comme indiqué dans Créer un message électronique à l’aide de l’API managée EWS. Tout d’abord, utilisez la méthode Bind pour récupérer le message, puis utilisez la méthode Send pour envoyer le message électronique, comme illustré dans l’exemple de code suivant. Notez que cette méthode n’enregistre pas le message envoyé dans le dossier Éléments envoyés.
Dans ce cas, les propriétés EmailMessageSchema.Subject et EmailMessageSchema.ToRecipients sont ajoutées au PropertySet afin que les valeurs puissent être incluses dans la sortie de la console.
Cet exemple suppose que le service est un objetExchangeService valide et que l’utilisateur a bien été authentifié pour un serveur Exchange.
// As a best practice, create a property set that limits the properties returned by the Bind method to only those that are required.
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Subject, EmailMessageSchema.ToRecipients);
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, propSet);
// Send the email message.
// This method call results in a SendItem call to EWS.
message.Send();
Console.WriteLine("An email with the subject '" + message.Subject + "' has been sent to '" + message.ToRecipients[0] + "'.");
Envoyer un brouillon de message électronique à l’aide d’EWS
Les exemples de code suivants montrent comment envoyer un message précédemment stocké dans le dossier Brouillons, comme indiqué dans Créer un message électronique à l’aide d’EWS. Tout d’abord, utilisez l’opération GetItem pour récupérer l’e-mail à envoyer. Utilisez ensuite l’opération SendItem pour envoyer le message électronique aux destinataires et l’enregistrer dans le dossier Éléments envoyés.
Le premier message, le message de demande GetItem , spécifie l’ItemId du brouillon de message électronique à lier, et les éléments de l’élément ItemShape limitent les résultats à inclure dans la réponse GetItem . L’élément ItemShape a une valeur BaseShapeidOnly, et l’élément AdditionalProperties inclut les valeurs FieldURI de la propriété Subject du schéma Item et la propriété ToRecipients du schéma Message, ce qui signifie que seuls les éléments ItemId, Subject et ToRecipients seront retournés au client dans la réponse. Pour plus d’informations sur la limitation des valeurs retournées dans les appels et la signification de l’élément BaseShape , consultez Jeux de propriétés et formes de réponse dans EWS dans Exchange.
Il s’agit également de la requête XML envoyée par l’API managée EWS lors de l’appel de la méthode Bind . Les valeurs de certains attributs et éléments ont été raccourcies pour des raisons de lisibilité.
<?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:GetItem>
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:Subject" />
<t:FieldURI FieldURI="message:ToRecipients" />
</t:AdditionalProperties>
</m:ItemShape>
<m:ItemIds>
<t:ItemId Id="AAMkADE4=" />
</m:ItemIds>
</m:GetItem>
</soap:Body>
</soap:Envelope>
L’exemple suivant présente la réponse XML que le serveur renvoie après avoir effectué l’opération GetItem. La réponse indique que le message électronique a été récupéré avec succès et inclut les éléments Subject et ToRecipient comme demandé. Les valeurs de certains attributs et éléments ont été raccourcies pour des raisons 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="842"
MinorBuildNumber="10"
Version="V2_8"
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:ItemId Id="AAMkADE4="
ChangeKey="CQAAABYA" />
<t:Subject>Project priorities</t:Subject>
<t:ToRecipients>
<t:Mailbox>
<t:Name>sadie@contoso.com</t:Name>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>OneOff</t:MailboxType>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:GetItemResponseMessage>
</m:ResponseMessages>
</m:GetItemResponse>
</s:Body>
</s:Envelope>
Le deuxième message, le message de demande SendItem , spécifie l’ItemId du message électronique à envoyer, ainsi que le SavedItemFolderId, qui spécifie le dossier dans lequel enregistrer l’élément envoyé.
<?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:SendItem SaveItemToFolder="true">
<m:ItemIds>
<t:ItemId Id="AAMkADE4="
ChangeKey="CQAAABYA" />
</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.
Envoyer un e-mail retardé à l’aide de l’API managée EWS
L’exemple de code suivant montre comment utiliser l’objet EmailMessage pour créer un message électronique, la classe ExtendedPropertyDefinition pour créer une définition de propriété pour la propriété PidTagDeferredSendTime (0x3FEF0040) et la méthode SendAndSaveCopy pour envoyer un message retardé 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.
// Create a new email message.
EmailMessage message = new EmailMessage(service);
// Specify the email recipient and subject.
message.ToRecipients.Add("sadie@contoso.com");
message.Subject = "Delayed email";
// Identify the extended property that can be used to specify when to send the email.
ExtendedPropertyDefinition PidTagDeferredSendTime = new ExtendedPropertyDefinition(16367, MapiPropertyType.SystemTime);
// Set the time that will be used to specify when the email is sent.
// In this example, the email will be sent one minute after the next line executes,
// provided that the message.SendAndSaveCopy request is processed by the server within one minute.
string sendTime = DateTime.Now.AddMinutes(1).ToUniversalTime().ToString();
// Specify when to send the email by setting the value of the extended property.
message.SetExtendedProperty(PidTagDeferredSendTime, sendTime);
// Specify the email body.
StringBuilder str = new StringBuilder();
str.AppendLine("The client submitted the SendAndSaveCopy request at: " + DateTime.Now.ToUniversalTime().ToString() + ".");
str.AppendLine("The email message will be sent at: " + sendTime + ".");
message.Body = str.ToString();
Console.WriteLine("");
Console.WriteLine("The client submitted the SendAndSaveCopy request at: " + DateTime.Now.ToUniversalTime().ToString() + ".");
Console.WriteLine("The email message will be sent at: " + sendTime + ".");
// Submit the request to send the email message.
message.SendAndSaveCopy();
Envoyer un e-mail retardé à l’aide d’EWS
L’exemple de code suivant montre comment utiliser l’opération CreateItem avec une valeur MessageDispositionde SendAndSaveCopy pour créer un message électronique, l’élément ExtendedProperty pour créer une définition de propriété pour la propriété PidTagDeferredSendTime (0x3FEF0040) pour définir une heure d’envoi du message et l’élément SavedItemFolderId pour enregistrer le message envoyé dans le dossier Éléments envoyés.
<?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="Exchange207_SP1" />
</soap:Header>
<soap:Body>
<m:CreateItem MessageDisposition="SendAndSaveCopy">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</m:SavedItemFolderId>
<m:Items>
<t:Message>
<t:Subject>Delayed email</t:Subject>
<t:Body BodyType="HTML">
The client submitted the SendAndSaveCopy request at: 1/2/2014 9:08:52 PM.
The email message will be sent at: 1/2/2014 9:09:52 PM.
</t:Body>
<t:ExtendedProperty>
<t:ExtendedFieldURI PropertyTag="16367"
PropertyType="SystemTime" />
<t:Value>2014-01-02T21:09:52.000</t:Value>
</t:ExtendedProperty>
<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.