Eh bien, j'ai finalement compris cela. Voici une méthode qui créera un message, le stockera comme brouillon, ajoutera la pièce jointe et enverra l'email. J'espère que cela aide quelqu'un qui n'était pas capable de trouver un bon exemple comme moi.
Dans mon exemple, je vais seulement envoyer des fichiers Excel, c'est pourquoi le type de contenu est défini comme il est. Cela peut évidemment être modifié pour prendre en charge tout type de pièce jointe. Pour référence, la variable esb est une variable de niveau classe de type ExchangeServiceBinding.
Modifier
Je tiens également à noter que dans cet exemple, je ne suis pas vérifier les types de réponse des actions de change pour le succès ou l'échec. Cela devrait certainement être vérifié si vous voulez savoir si vos appels à EWS ont effectivement fonctionné.
public void SendEmail(string from, string to, string subject, string body, byte[] attachmentAsBytes, string attachmentName)
{
//Create an email message and initialize it with the from address, to address, subject and the body of the email.
MessageType email = new MessageType();
email.ToRecipients = new EmailAddressType[1];
email.ToRecipients[0] = new EmailAddressType();
email.ToRecipients[0].EmailAddress = to;
email.From = new SingleRecipientType();
email.From.Item = new EmailAddressType();
email.From.Item.EmailAddress = from;
email.Subject = subject;
email.Body = new BodyType();
email.Body.BodyType1 = BodyTypeType.Text;
email.Body.Value = body;
//Save the created email to the drafts folder so that we can attach a file to it.
CreateItemType emailToSave = new CreateItemType();
emailToSave.Items = new NonEmptyArrayOfAllItemsType();
emailToSave.Items.Items = new ItemType[1];
emailToSave.Items.Items[0] = email;
emailToSave.MessageDisposition = MessageDispositionType.SaveOnly;
emailToSave.MessageDispositionSpecified = true;
CreateItemResponseType response = esb.CreateItem(emailToSave);
ResponseMessageType[] rmta = response.ResponseMessages.Items;
ItemInfoResponseMessageType emailResponseMessage = (ItemInfoResponseMessageType)rmta[0];
//Create the file attachment.
FileAttachmentType fileAttachment = new FileAttachmentType();
fileAttachment.Content = attachmentAsBytes;
fileAttachment.Name = attachmentName;
fileAttachment.ContentType = "application/ms-excel";
CreateAttachmentType attachmentRequest = new CreateAttachmentType();
attachmentRequest.Attachments = new AttachmentType[1];
attachmentRequest.Attachments[0] = fileAttachment;
attachmentRequest.ParentItemId = emailResponseMessage.Items.Items[0].ItemId;
//Attach the file to the message.
CreateAttachmentResponseType attachmentResponse = (CreateAttachmentResponseType)esb.CreateAttachment(attachmentRequest);
AttachmentInfoResponseMessageType attachmentResponseMessage = (AttachmentInfoResponseMessageType)attachmentResponse.ResponseMessages.Items[0];
//Create a new item id type using the change key and item id of the email message so that we know what email to send.
ItemIdType attachmentItemId = new ItemIdType();
attachmentItemId.ChangeKey = attachmentResponseMessage.Attachments[0].AttachmentId.RootItemChangeKey;
attachmentItemId.Id = attachmentResponseMessage.Attachments[0].AttachmentId.RootItemId;
//Send the email.
SendItemType si = new SendItemType();
si.ItemIds = new BaseItemIdType[1];
si.SavedItemFolderId = new TargetFolderIdType();
si.ItemIds[0] = attachmentItemId;
DistinguishedFolderIdType siSentItemsFolder = new DistinguishedFolderIdType();
siSentItemsFolder.Id = DistinguishedFolderIdNameType.sentitems;
si.SavedItemFolderId.Item = siSentItemsFolder;
si.SaveItemToFolder = true;
SendItemResponseType siSendItemResponse = esb.SendItem(si);
}
Utilisez-vous l'API Managed ou tout simplement EWS? Les bits varient légèrement mais sont encore assez faciles. Suivez le didacticiel que vous avez trouvé pour créer une instance de messagerie, puis, dans l'API Managed, tout ce que vous avez à faire est: email.Attachments.Add (fileName); – Chris
J'utilise juste EWS. J'ai trouvé un exemple qui crée un FileAttachmentType puis crée un CreateAttachmentType à partir de cette pièce jointe. Il appelle ensuite ews.CreateAttachment en utilisant le CreateAttachmentType. Est-ce ce que je devrais faire? J'espérais que ce serait un peu plus intuitif, comme votre réponse le suggère, mais je trouve que l'attachement d'un fichier à un email est un peu plus "flou" que ce à quoi je m'attendais. – Anthony