Hier ist mein Szenario, das ich zu lösen versuche: Ich habe Zugriff mit meinem Benutzer 'myuser' auf ein Service-Postfach 'serviceMail'. Dies ist also nicht meine persönliche Mailbox, sondern eine andere Mailbox-Einrichtung in meiner Firma, an die wir für verschiedene Zwecke eine E-Mail gesendet haben. Ich weiß, dass ich Zugriff darauf habe, da ich dieses Postfach in meinem Outlook hinzugefügt habe und ich den Posteingang wie gewohnt für meine eigene E-Mail abrufen kann. Ich versuche, EWS zu verwenden, um ein C# -Programm zu schreiben, das die Anhänge von E-Mails in der 'serviceMail'-Inbox ergreift. Ich bekomme einen "401 Unauthorized Access", wenn ich versuche, Gegenstände zu finden. Was mache ich falsch? Mein Code ist unten.401 UnAuthorized Access, wenn EWS zum Herstellen einer Verbindung zum Postfach verwendet wird
Hier ist, wie ich in den Dienst anschließe.
public ExchangeService ConnectToExchangeServer()
{
const string strMailbox = "[email protected]";
const string strLoginUser = "[email protected]";
const string strLogingUserpwd = "pwd";
const string strO365Url = "https://outlook.office365.com/EWS/Exchange.asmx";
try
{
exchange = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
exchange.Credentials = new WebCredentials(strLoginUser, strLogingUserpwd, "sabra.com");
// exchange.AutodiscoverUrl(strMailbox,RedirectionUrlValidationCallback);
exchange.Url = new Uri(strO365Url);
return exchange;
}
catch (Exception ex)
{
}
return exchange;
}
unten ist der Code für den Versuch, die Elemente
ExchangeService service = ga.ConnectToExchangeServer();
TimeSpan ts = new TimeSpan(0, -1, 0, 0);
DateTime date = DateTime.Now.Add(ts);
SearchFilter.IsGreaterThanOrEqualTo filter = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, date);
if (service != null)
{
//FindItemsResults<Item> findResults = ga.exchange.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50));
//FindItemsResults<Item> findResults = ga.exchange.FindItems(WellKnownFolderName.Inbox,);
// Return a single item.
ItemView view = new ItemView(1);
string querystring = "HasAttachments:true Subject:'Message with Attachments' Kind:email";
// Find the first email message in the Inbox that has attachments. This results in a FindItem operation call to EWS.
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, querystring, view);
foreach (Item item in findResults)
{
EmailMessage message = EmailMessage.Bind(ga.exchange, item.Id);
if (message.HasAttachments && message.Attachments[0] is FileAttachment)
{
FileAttachment fileAttachment = message.Attachments[0] as FileAttachment;
//Change the below Path
fileAttachment.Load(@"D:\\QlikData\\Lean\\EmailExtract" + fileAttachment.Name);
// lblAttach.Text = "Attachment Downloaded : " + fileAttachment.Name;
}
else
{
// MessageBox.Show("No Attachments found!!");
}
}
if (findResults.Items.Count <= 0)
{
//lstMsg.Items.Add("No Messages found!!");
}
}
erhalte ich die Fehlermeldung „Fehler bei der Anforderung der Remote-Server zurück finden ein Fehler: (401) Nicht autorisiert. in der Codezeile findItemsResults findResults = service.FindItems (WellKnownFolderName.Inbox, querystring, view).
Irgendwelche Ideen?