Répondre aux messages électroniques à l’aide d’EWS dans Exchange
Découvrez comment répondre aux messages électroniques à l’aide de l’API managée EWS ou EWS dans Exchange.
Vous pouvez utiliser l’API managée EWS ou EWS pour répondre aux messages en y répondant ou en les transférant aux destinataires.
Tableau 1. Méthodes d’API managée EWS et opérations EWS pour répondre aux messages électroniques
Tâche | Méthode d'API managée EWS | Opération EWS |
---|---|---|
Répondre à un e-mail |
EmailMessage.Reply EmailMessage.CreateReply |
CreateItem, où l’élément Items a un élément enfant de ReplyToItem ou ReplyAllToItem. |
Transférer un e-mail |
EmailMessage.Forward EmailMessage.CreateForward |
CreateItem, où l’élément Items a un élément enfant de ForwardItem. |
Répondre à un e-mail à l’aide de l’API managée EWS
L’API managée EWS fournit deux méthodes que vous pouvez utiliser pour répondre aux messages : Reply et CreateReply. La méthode Reply prend uniquement deux paramètres : le message de réponse à ajouter au corps existant et une valeur booléenne qui indique si la réponse doit être destinée à tous les destinataires (true) ou uniquement à l’expéditeur (false). Si vous devez ajouter des destinataires supplémentaires à un message, définir des propriétés supplémentaires sur une réponse ou ajouter une pièce jointe, utilisez la méthode CreateReply , qui vous permet de définir toutes les propriétés de première classe disponibles sur un objet EmailMessage .
L’exemple de code suivant montre comment utiliser la méthode Reply pour répondre à un e-mail.
Cet exemple suppose que le service est un objetExchangeService valide et que l’utilisateur a bien été authentifié pour un serveur Exchange. La variable locale ItemId est l’ID de l’élément auquel répondre. L’exemple appelle la méthode FindRecentlySent pour vérifier que le message a été marqué comme étant répondu.
// As a best practice, limit the properties returned by the Bind method to only those that are required.
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.LastModifiedTime);
// Bind to the email message to reply to by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, propSet);
string myReply = "This is the message body of the email reply.";
bool replyToAll = false;
// Send the response message.
// This method call results in a CreateItem call to EWS.
message.Reply(myReply, replyToAll);
// Verify that the response was sent by calling FindRecentlySent.
FindRecentlySent(message);
L’exemple de code suivant montre comment utiliser la méthode CreateReply pour répondre à un e-mail.
// Bind to the email message to reply to by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, BasePropertySet.IdOnly);
// Create the reply response message from the original email message.
// Indicate whether the message is a reply or reply all type of reply.
bool replyToAll = true;
ResponseMessage responseMessage = message.CreateReply(replyToAll);
// Prepend the reply to the message body.
string myReply = "This is the message body of the email reply.";
responseMessage.BodyPrefix = myReply;
// Send the response message.
// This method call results in a CreateItem call to EWS.
responseMessage.SendAndSaveCopy();
// Check that the response was sent by calling FindRecentlySent.
FindRecentlySent(message);
Si vous devez ajouter une pièce jointe au message de réponse, remplacez l’appel à la méthode SendAndSaveCopy par le code suivant.
EmailMessage reply = responseMessage.Save();
reply.Attachments.AddFileAttachment("attachmentname.txt");
reply.Update(ConflictResolutionMode.AutoResolve);
reply.SendAndSaveCopy();
Répondre à un e-mail à l’aide d’EWS
L’exemple de code suivant montre comment répondre à un message à l’aide d’EWS. Utilisez l’opération CreateItem avec l’attribut MessageDisposition défini sur SendAndSaveCopy pour envoyer le message et enregistrer la réponse dans le dossier Éléments envoyés. Incluez l’élément ReplyAllToItem en tant qu’enfant de l’élément Items pour répondre à tout le monde sur le thread de message, ou incluez l’élément ReplyToItem pour répondre uniquement à l’expéditeur.
Il s’agit également de la requête XML que l’API managée EWS envoie lors de l’appel de la méthode Reply ou CreateReply .
<?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:Items>
<t:ReplyAllToItem>
<t:ReferenceItemId Id="AAMkADE4="
ChangeKey="CQAAABYA" />
<t:NewBodyContent BodyType="HTML">This is the message body of the email reply.</t:NewBodyContent>
</t:ReplyAllToItem>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
Le serveur répond à la requête CreateItem avec un message CreateItemResponse qui inclut une valeur d’élément ResponseCodeNoError, ce qui indique que la réponse a été créée et envoyée avec succès.
Si vous devez ajouter une pièce jointe à votre message de réponse, appelez l’opération CreateItem comme spécifié ci-dessus, mais remplacez messageDisposition par SaveOnly. Appelez ensuite l’opération CreateAttachment , suivie de l’opération SendItem .
Transférer un e-mail à l’aide de l’API managée EWS
L’API managée EWS fournit deux méthodes que vous pouvez utiliser pour transférer des messages : Forward et CreateForward. La méthode Forward prend uniquement deux paramètres : le message à ajouter au corps existant et un tableau ou une collection de destinataires, en fonction de la surcharge que vous choisissez d’utiliser. Si vous devez ajouter une pièce jointe au message que vous transférez ou définir des propriétés supplémentaires sur le nouveau message, utilisez la méthode CreateForward , qui vous permet de définir toutes les propriétés disponibles sur un objet EmailMessage .
L’exemple de code suivant montre comment utiliser la méthode Forward pour transférer un e-mail à un destinataire.
Cet exemple suppose que le service est un objetExchangeService valide et que l’utilisateur a bien été authentifié pour un serveur Exchange. La variable locale ItemId est l’ID de l’élément à transférer. L’exemple appelle la méthode FindRecentlySent pour vérifier que le message a été marqué comme transféré.
// Bind to the email message to reply to by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, BasePropertySet.IdOnly);
string myForward = "This is the message body of the forwarded email.";
// Send the response message.
// This method call results in a CreateItem call to EWS.
message.Forward(myForward, "sadie@contoso.com");
// Verify that the forwarded response was sent by calling FindRecentlySent.
FindRecentlySent(message);
L’exemple de code suivant montre comment utiliser la méthode CreateForward pour transférer un e-mail à un destinataire.
// Bind to the email message to reply to by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, BasePropertySet.IdOnly);
// Create the reply response message from the original email message.
// Indicate whether the message is a reply or reply all type of reply.
ResponseMessage forwardMessage = message.CreateForward();
// Set properties on the email message.
forwardMessage.ToRecipients.Add("sadie@contoso.com");
forwardMessage.Body = "Sadie,<br><br>I thought you'd be interested in this thread.<br><br>-Mack";
// Send and save a copy of the replied email message in the default Sent Items folder.
forwardMessage.SendAndSaveCopy();
// Verify that the forwarded message was sent by calling FindRecentlySent.
FindRecentlySent(message);
Si vous devez ajouter une pièce jointe au message transféré, remplacez l’appel à la méthode SendAndSaveCopy par le code suivant.
EmailMessage forward = forwardMessage.Save();
forward.Attachments.AddFileAttachment("attachmentname.txt");
forward.Update(ConflictResolutionMode.AutoResolve);
forward.SendAndSaveCopy();
Transférer un e-mail à l’aide d’EWS
L’exemple de code suivant montre comment transférer un message à l’aide d’EWS. Utilisez l’opération CreateItem avec l’attribut MessageDisposition défini sur SendAndSaveCopy pour envoyer le message et enregistrer la réponse dans le dossier Éléments envoyés. L’élément ForwardItem indique que l’élément est un message transféré.
Il s’agit également de la requête XML que l’API managée EWS envoie lors de l’appel de la méthode Forward ou CreateForward .
<?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:Items>
<t:ForwardItem>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
<t:ReferenceItemId Id="AAAMkADE="
ChangeKey="CQAAABYA" />
<t:NewBodyContent BodyType="HTML">This is the message body of the forwarded email.</t:NewBodyContent>
</t:ForwardItem>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
Le serveur répond à la requête CreateItem avec un message CreateItemResponse qui inclut une valeur d’élément ResponseCodenoError, ce qui indique que le message transféré a été créé et envoyé avec succès.
Si vous devez ajouter une pièce jointe à votre message de réponse, appelez l’opération CreateItem , mais remplacez messageDisposition par SaveOnly. Appelez ensuite l’opération CreateAttachment , suivie de l’opération SendItem .
Rechercher le dernier message répondu ou transféré à l’aide de l’API managée EWS
L’exemple de code suivant montre comment rechercher le dernier verbe exécuté et l’heure à laquelle le dernier verbe a été exécuté sur l’élément spécifié. Cette méthode est appelée à partir d’autres exemples de code d’API managée EWS de cette rubrique pour vérifier que les éléments auxquels vous avez répondu ou transféré ont été marqués comme étant répondus ou transférés dans votre boîte de réception.
L’exemple utilise la propriété étendue PidTagLastVerbExecuted (0x10820003) pour déterminer si le message était une réponse, une réponse tout ou un transfert, et la propriété étendue PidTagLastVerbExecutionTime (0x10820040) pour déterminer quand la réponse ou le transfert a été envoyé.
public static void FindRecentlySent(EmailMessage messageToCheck)
{
// Create extended property definitions for PidTagLastVerbExecuted and PidTagLastVerbExecutionTime.
ExtendedPropertyDefinition PidTagLastVerbExecuted = new ExtendedPropertyDefinition(0x1081, MapiPropertyType.Integer);
ExtendedPropertyDefinition PidTagLastVerbExecutionTime = new ExtendedPropertyDefinition(0x1082, MapiPropertyType.SystemTime);
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Subject, PidTagLastVerbExecutionTime, PidTagLastVerbExecuted);
messageToCheck = EmailMessage.Bind(service, messageToCheck.Id, propSet);
// Determine the last verb executed on the message and display output.
object responseType;
if (messageToCheck.TryGetProperty(PidTagLastVerbExecuted, out responseType))
{
object ReplyTime = null;
switch (((Int32)responseType))
{
case 102: Console.WriteLine("A reply was sent to the '" + messageToCheck.Subject.ToString() + "' email message at");
break;
case 103: Console.WriteLine("A reply all was sent to the '" + messageToCheck.Subject.ToString() + "' email message at");
break;
case 104: Console.WriteLine("The '" + messageToCheck.Subject.ToString() + "' email message was forwarded at");
break;
}
if (messageToCheck.TryGetProperty(PidTagLastVerbExecutionTime, out ReplyTime))
{
Console.WriteLine(((DateTime)ReplyTime).ToString() + ".");
}
}
else
{
Console.WriteLine("No changes were made to '" + messageToCheck.Subject.ToString() + "'.");
}
}