Для автообнаружения будет использоваться URL-адрес autodiscover-s.outlook.com. Outlook.office365.com - это конечная точка EWS, которая в основном и всегда возвращается кодом автообнаружения для Office365, поскольку это конечная точка stati c. Если вы используете Office365, то вы можете считать Autodiscover избыточным, поскольку он будет возвращать только https://outlook.office365.com/EWS/Exchange.asmx, поэтому я бы посоветовал вам попробовать следующее для жесткого кодирования URL.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Exchange.WebServices.Data;
using System.Configuration;
using System.Globalization;
using System.IO;
namespace DWMailProcessor
{
class Program
{
static void Main(string[] args)
{
string emailName = ConfigurationManager.AppSettings["emailName"];
string emailPassWord = ConfigurationManager.AppSettings["emailPassWord"];
string filterSubject = ConfigurationManager.AppSettings["filterSubject"];
string extractFilePath = ConfigurationManager.AppSettings["extractFilePath"];
string emailFolder = ConfigurationManager.AppSettings["emailFolder"];
string logFilePath = ConfigurationManager.AppSettings["logFilePath"] + $@"\DWMailProcessor.ErrorLog"; ;
try
{
ExchangeService exchange = new ExchangeService(ExchangeVersion.Exchange2016);
exchange.Credentials = new WebCredentials(emailName, emailPassWord);
exchange.Url = new Uri("https://outlook.office365.com/ews/exchange.asmx");
exchange.HttpHeaders.Add("X-AnchorMailbox", emailName);
if (exchange != null)
{
Folder rootFolder = Folder.Bind(exchange, WellKnownFolderName.MsgFolderRoot);
SearchFilter ff = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, emailFolder);
FindFoldersResults fresult = rootFolder.FindFolders(ff, new FolderView(1));
FindItemsResults<Item> result;
do
{
SearchFilter sf = new SearchFilter.IsEqualTo(EmailMessageSchema.Subject, filterSubject);
result = exchange.FindItems(WellKnownFolderName.Inbox, sf, new ItemView(100));
foreach (Item item in result)
{
EmailMessage message = EmailMessage.Bind(exchange, item.Id);
FileAttachment attachment = (FileAttachment)message.Attachments[0];
attachment.Load(extractFilePath + @"\" + attachment.Name);
item.Move(fresult.Folders[0].Id);
}
} while (result.TotalCount > 0);
}
}
catch (Exception e)
{
using (StreamWriter sw = new StreamWriter(logFilePath, append: true))
{
sw.WriteLine($"Fatal[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InstalledUICulture)}]: {e.Message}");
}
//throw;
return;
}
}
}
}
One Другая проблема с вашим кодом - это использование аутентификации Basi c, которая будет проходить в октябре https://support.microsoft.com/en-au/help/4521831/exchange-online-deprecating-basic-auth, поэтому рассмотрите возможность использования oAuth.
Вероятно, последнее, что нужно посмотреть на код, который вы используете, это то, что все это можно сделать в Microsoft Graph API (возможно, и в PowerAutomate), что позволит вам уменьшить количество разрешений, необходимых вашему приложению, и дать вам больше гибкости в том, как / где вы ее выполняете и продлеваете жизнь любому процессу (в случае, если EWS отключается в любой момент в будущем).