2017-04-11 1 views
0

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?

Antwort

0

Ihr Code wird nur auf den Posteingang des Postfachs des aufrufenden Kontos zugreifen. Sie müssen die FolderId-Überladung verwenden, um das eigentliche Postfach anzugeben, auf das Sie zugreifen möchten. siehe „Explicit Zugriff und das EWS Managed API“ in https://msdn.microsoft.com/en-us/library/office/dn641957(v=exchg.150).aspx

Sie auch sind specifing die Benutzername in den Anmeldeinformationen falsch zB sollten Sie entweder den PC-Ebene Format netbiosdomain \ Benutzername verwenden oder verwenden Sie die UPN https://msdn.microsoft.com/en-us/library/windows/desktop/aa380525(v=vs.85).aspx und lassen Sie die Domäne in diesem Fall. siehe https://social.technet.microsoft.com/Forums/en-US/12de5368-dde0-4d91-a1b2-394c4487d0f1/ews-the-request-failed-the-remote-server-returned-an-error-401-unauthorized?forum=exchangesvrdevelopment

Verwandte Themen