Ошибка отправки электронной почты за исключением: «индекс выходит за пределы диапазона. Имя параметра: индекс» при добавлении ItemAttachment - PullRequest
0 голосов
/ 08 апреля 2019

Я использую 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...