Я использую EWS Managed API 2.0 для почтового клиента.Проблема заключается в том, что при отправке электронных писем, если я прикрепляю Предмет, такой как другое письмо, к ItemAttachment, метод SendAndSaveCopy()
выдает исключение «Индекс вне диапазона».Работает нормально, если я не добавляю ItemAttachment.
Мой код:
public void SendEmail(EmailAddViewModel email, IEnumerable<string> emailAttachments = null)
{
logger.LogInfo("SendEmail routine initiated");
// Create an email message and set properties on the message.
EmailMessage message = new EmailMessage(exchangeService);
// Set properties on the email message.
message.Subject = email.Subject;
message.Body = new MessageBody(BodyType.HTML, email.Body);
foreach (var recipient in email.ToRecipients)
{
message.ToRecipients.Add(recipient);
}
foreach (var recipient in email.CcRecipients)
{
message.CcRecipients.Add(recipient);
}
foreach (var recipient in email.BccRecipients)
{
message.BccRecipients.Add(recipient);
}
foreach (var attachment in email.Attachments)
{
// Add a file attachment by using a byte array.
byte[] theBytes = Convert.FromBase64String(attachment.Content);
//Add attachment to list
message.Attachments.AddFileAttachment(attachment.Name, theBytes);
//Update attachment properties
message.Attachments[message.Attachments.Count - 1].ContentId = attachment.ContentId;
message.Attachments[message.Attachments.Count - 1].IsInline = attachment.IsInline;
message.Attachments[message.Attachments.Count - 1].ContentType = attachment.ContentType;
}
if (emailAttachments != null)
{
foreach (var itemAttachment in emailAttachments)
{
EmailMessage originalEmail = EmailMessage.Bind(exchangeService, new ItemId(emailAttachments.First()));
PropertySet psPropset = new PropertySet(BasePropertySet.IdOnly);
psPropset.Add(ItemSchema.MimeContent);
psPropset.Add(ItemSchema.Subject);
originalEmail.Load(psPropset);
ItemAttachment attachment = message.Attachments.AddItemAttachment<EmailMessage>();
attachment.Item.MimeContent = originalEmail.MimeContent;
ExtendedPropertyDefinition PR_Flags = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
attachment.Item.SetExtendedProperty(PR_Flags, "1");
attachment.Name = "Attachment";//originalEmail.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();
logger.LogInfo("Email sent");
}
Stacktrace:
index is out of range.
Parameter name: index
at Microsoft.Exchange.WebServices.Data.ComplexPropertyCollection`1.get_Item(Int32 index)
at Microsoft.Exchange.WebServices.Data.ComplexPropertyCollection`1.UpdateFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName)
at Microsoft.Exchange.WebServices.Data.ComplexPropertyDefinitionBase.InternalLoadFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag)
at Microsoft.Exchange.WebServices.Data.ComplexPropertyDefinitionBase.LoadPropertyValueFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag)
at Microsoft.Exchange.WebServices.Data.PropertyBag.LoadFromXml(EwsServiceXmlReader reader, Boolean clear, PropertySet requestedPropertySet, Boolean onlySummaryPropertiesRequested)
at Microsoft.Exchange.WebServices.Data.ItemAttachment.TryReadElementFromXmlToPatch(EwsServiceXmlReader reader)
at Microsoft.Exchange.WebServices.Data.ComplexProperty.InternalLoadFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName, Func`2 readAction)
at Microsoft.Exchange.WebServices.Data.ComplexProperty.UpdateFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName)
at Microsoft.Exchange.WebServices.Data.ComplexPropertyCollection`1.UpdateFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName)
at Microsoft.Exchange.WebServices.Data.ComplexPropertyDefinitionBase.InternalLoadFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag)
at Microsoft.Exchange.WebServices.Data.ComplexPropertyDefinitionBase.LoadPropertyValueFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag)
at Microsoft.Exchange.WebServices.Data.PropertyBag.LoadFromXml(EwsServiceXmlReader reader, Boolean clear, PropertySet requestedPropertySet, Boolean onlySummaryPropertiesRequested)
at Microsoft.Exchange.WebServices.Data.EwsServiceXmlReader.ReadServiceObjectsCollectionFromXml[TServiceObject](XmlNamespace collectionXmlNamespace, String collectionXmlElementName, GetObjectInstanceDelegate`1 getObjectInstanceDelegate, Boolean clearPropertyBag, PropertySet requestedPropertySet, Boolean summaryPropertiesOnly)
at Microsoft.Exchange.WebServices.Data.CreateItemResponseBase.ReadElementsFromXml(EwsServiceXmlReader reader)
at Microsoft.Exchange.WebServices.Data.ServiceResponse.LoadFromXml(EwsServiceXmlReader reader, String xmlElementName)
at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.ParseResponse(EwsServiceXmlReader reader)
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ReadResponse(EwsServiceXmlReader ewsXmlReader)
at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponseXml(Stream responseStream)
at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponse(IEwsHttpWebResponse response)
at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalCreateItems(IEnumerable`1 items, FolderId parentFolderId, Nullable`1 messageDisposition, Nullable`1 sendInvitationsMode, ServiceErrorHandling errorHandling)
at Microsoft.Exchange.WebServices.Data.Item.InternalCreate(FolderId parentFolderId, Nullable`1 messageDisposition, Nullable`1 sendInvitationsMode)
at Microsoft.Exchange.WebServices.Data.EmailMessage.InternalSend(FolderId parentFolderId, MessageDisposition messageDisposition)
at Mach.Omega.Mail.DAL.EWS.Connectivity.EmailActivity.SendEmail(EmailAddViewModel email, IEnumerable`1 emailAttachments) in D:\Sourcecode\Mach.Omega\Sourcecode\Mach.Omega.Mail\Mach.Omega.Mail.DAL\EWS\Connectivity\EmailActivity.cs:line 90
at Mach.Omega.Mail.BAL.Managers.EmailManager.AddEmail(EmailAddViewModel email) in D:\Sourcecode\Mach.Omega\Sourcecode\Mach.Omega.Mail\Mach.Omega.Mail.BAL\Managers\EmailManager\EmailManager.cs:line 230
at Mach.Omega.Mail.API.Controller.EmailController.Add(EmailAddViewModel email) in D:\Sourcecode\Mach.Omega\Sourcecode\Mach.Omega.Mail\Mach.Omega.Mail.API\Controller\EmailController.cs:line 66
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
Обновление: Тамэто неразрешенная ошибка в EWS API https://github.com/OfficeDev/ews-managed-api/issues/141