简体   繁体   中英

Folder.Bind Throws ArgumentNullException

I'm trying to create an email client that can give me a list of emails from a certain date using the EWS Managed API but I keep getting an exception when I call Folder.Bind().

Exception thrown: 'System.ArgumentNullException' in mscorlib.dll Additional information: Value cannot be null.

堆

It says it's an ArgumentNullException but one parameter is an enum and the other is not null at runtime. From the stack it seems to be an exception from within the EWS API that wasn't handled nicely but I don't know what the problem is.

Here's my code.

using Microsoft.Exchange.WebServices.Data;
using System;
using System.Collections.Generic;
using System.Linq;

namespace Integration
{
    public class ExchangeEmailClient : EmailClientBase
    {
        public ExchangeEmailClient(string emailAddress, string password)
        {
            ExchangeService = new ExchangeService();
            ExchangeService.Credentials = new WebCredentials(emailAddress, password);
            ExchangeService.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
        }

        public ExchangeService ExchangeService { get; private set; }

        public override IEnumerable<Email> Receive(DateTime getFrom)
        {
            //Get emails
            var inbox = Folder.Bind(ExchangeService, WellKnownFolderName.Inbox); //Exception thrown here!
            var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived, getFrom));
            var emails = inbox.FindItems(filter, new ItemView(int.MaxValue));

            //Transform (use data transformation tool?)
            foreach (EmailMessage exchangeEmail in emails)
            {
                var standardEmail = new Email();
                standardEmail.Body = exchangeEmail.Body;
                standardEmail.Subject = exchangeEmail.Subject;
                standardEmail.From = exchangeEmail.From.Address;

                standardEmail.Attachments = exchangeEmail.Attachments.Select(x => new Uri(x.ContentLocation)).ToList();
                standardEmail.CarbonCopy = exchangeEmail.CcRecipients.Select(x => x.Address).ToList();

                yield return standardEmail;
            }
        }

        public override void Send(Email email)
        {
            var outgoingMail = new EmailMessage(ExchangeService);
            outgoingMail.Body = email.Body;
            outgoingMail.Subject = email.Subject;
            outgoingMail.From = new EmailAddress(email.From);

            //Get attachments
            email.Attachments.ForEach(x => outgoingMail.Attachments.AddFileAttachment(x.ToString()));

            //Set addresses
            email.To.ForEach(x => outgoingMail.ToRecipients.Add(new EmailAddress(x)));
            email.CarbonCopy.ForEach(x => outgoingMail.CcRecipients.Add(new EmailAddress(x)));
            email.BlindCarbonCopy.ForEach(x => outgoingMail.BccRecipients.Add(new EmailAddress(x)));

            //Send
            outgoingMail.SendAndSaveCopy();
        }
    }
}

Getting the items like this throws the same exception:

//Get emails 
var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived, getFrom)); 
var emails = ExchangeService.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(int.MaxValue)); 

This happens in both version 2.2.0 and 1.2.0 of the EWS API SDK.

This exception is handled inside the EWS library and I just had Enable Just My Code turned off. The code executes and continues normally.

Source: mr_frostfire @ https://social.msdn.microsoft.com/Forums/en-US/f0806f0b-758c-429d-ad0c-e08274c1660b/getting-impossible-argumentnullexception-from-ensurestrongcryptosettingsinitialized-in?forum=netfxbcl

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM