Je dois créer un outil VB .net pour lire les courriers électroniques et enregistrer les pièces jointes. Ma société a récemment migré d'Exchange sur site vers Office 365. Je lis des didacticiels EWS depuis 2 jours et je recherche StackOverflow, mais je ne parviens pas à franchir l'étape la plus élémentaire de l'accès autorisé à la boîte aux lettres O365. J'ai pris le code original de cet article: htp: //www.c-sharpcorner.com/UploadFile/jj12345678910/reading-email-and-attachment-from-microsoft-exchange-server/. J'ai eu du mal à le convertir en VB en utilisant le convertisseur Telerik mais je pense que j'ai raison. Chaque fois que j'essaie d'utiliser la méthode FindItemsResults, elle s'arrête avec "(401) Unauthorized".EWS Connexion à Office365 échoue - 401 non autorisé
Les instructions pour poser une question indiquent que je devrais inclure des liens vers ce que j'ai déjà trouvé et pourquoi cela n'a pas fonctionné, mais ma réputation de SO me permet seulement 2 liens. Voici ce que j'ai essayé:
J'ai essayé toutes les combinaisons de domaines et de domaines possibles après avoir lu cette page: htps: //stackoverflow.com/questions/10107872/ews-connections-issues-401-unauthorized
J'essaie de lire ma propre boîte aux lettres, donc celui-ci n'aide pas: htps: //stackoverflow.com/questions/43346498/401-unauthorized-access-when-using-ews-to-connect-to-mailbox
Ma connexion semble identique à la connexion sur cette page, mais l'utiliser dans mon projet n'a pas dépassé la même erreur non autorisée que précédemment: htps: //stackoverflow.com/questions/29009295/ews-managed-api- récupérer-e-mails-de-office365-exchange-server
Voici mon code:
Public Class Form1
Public Exchange As ExchangeService
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lstMsg.Clear()
lstMsg.View = View.Details
lstMsg.Columns.Add("Date", 150)
lstMsg.Columns.Add("From", 250)
lstMsg.Columns.Add("Subject", 400)
lstMsg.Columns.Add("Has Attachment", 50)
lstMsg.Columns.Add("Id", 100)
lstMsg.FullRowSelect = True
End Sub
Public Sub ConnectToExchangeServer()
Me.lblMsg.Text = "Connecting to Exchange Server"
lblMsg.Refresh()
Try
'Exchange = New ExchangeService(ExchangeVersion.Exchange2013)
Exchange = New ExchangeService()
Exchange.TraceEnabled = True
'Exchange.UseDefaultCredentials = True
Exchange.Credentials = New WebCredentials("DoeJohn", "mypasswd", "mycorp.com")
'Exchange.AutodiscoverUrl("[email protected]", AddressOf MyRedirectionURLValidationCallback)
'Exchange.AutodiscoverUrl("[email protected]", AddressOf MyRedirectionURLValidationCallback)
Exchange.Url = New System.Uri("https://outlook.office365.com/ews/exchange.asmx")
lblMsg.Text = "Connected to Exchange Server"
lblMsg.Refresh()
Catch ex As Exception
MsgBox("Fatal Error in Connect: " & ex.Message)
End
End Try
End Sub
Public Function MyRedirectionURLValidationCallback(RedirectionURL As String) As Boolean
Dim Result As Boolean = False
Dim RedirectionURI As Uri = New Uri(RedirectionURL)
If RedirectionURI.Scheme = "https" Then
Return True
End If
Return False
End Function
Private Sub btnRead_Click(sender As Object, e As EventArgs) Handles btnRead.Click
Call ConnectToExchangeServer()
Dim ts As TimeSpan = New TimeSpan(0, -1, 0, 0)
Dim MyDate As DateTime = DateTime.Now.Add(ts)
Dim MyFilter As SearchFilter.IsGreaterThanOrEqualTo = New SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, MyDate)
If Exchange IsNot Nothing Then
Dim FindResults As FindItemsResults(Of Item) =
Exchange.FindItems(WellKnownFolderName.Inbox, MyFilter, New ItemView(50))
Dim NewRow As ListViewItem
For Each MyItem As Item In FindResults
Dim Message As EmailMessage = EmailMessage.Bind(Exchange, MyItem.Id)
NewRow = New ListViewItem(Message.DateTimeReceived.ToString())
NewRow.SubItems.Add(Message.From.Name.ToString())
NewRow.SubItems.Add(Message.Subject)
NewRow.SubItems.Add(Message.HasAttachments.ToString())
NewRow.SubItems.Add(Message.Id.ToString())
lstMsg.Items.Add(NewRow)
Next
Else
End If
End Sub
Je confirme que AutoDiscover est de trouver correctement le serveur, à comparer à tester dans Outlook Email AutoConfiguration.
Une sidenote intéressante - après mon entreprise a déménagé à Office 365, je remarque que j'ai deux nouvelles adresses de messagerie SMTP. Si j'ouvre les propriétés Outlook sur moi-même, je vois ceci:
Cela signifie que quelqu'un peut envoyer du courrier à moi maintenant, soit à l'ancienne adresse [email protected], et aussi maintenant à doejohn @ mycorp .mail.onmicrosoft.com. La nouvelle adresse est basée sur mon code d'utilisateur de domaine. J'ai testé le microsoft à partir d'un compte Gmail et cela fonctionne. En résumé, voici mes questions: 1. Pourquoi est-ce que je reçois les erreurs (401) non autorisées lorsque j'essaie de lire ma boîte de réception? 2. Office 365 m'attend-il à utiliser mon compte de domaine ou le nom de ma boîte aux lettres pour les informations d'identification de l'utilisateur? 3. Dans la partie domaine de l'instruction WebCredentials, est-ce que j'utilise mycorp.com de ma société ou est-ce que j'utilise le domaine outlook.office365.com d'Office 365?
Si vous avez lu jusqu'ici, merci beaucoup!