J'utilise VBA dans une certaine mesure, en utilisant ce code: Cependant, cela donne à la sortie comme noms des adresses électroniques et non l'adresse électronique réelle avec la existe une attribute de la messagerie mailObject qui permettra aux adresses e-mail et non aux noms d'être écrits de la merci p> p> p> 'to' code> strong >box. p>
5 Réponses :
Consultez l'objet de collecte des destinataires pour votre article de messagerie, ce qui devrait vous permettre d'obtenir l'adresse suivante: http://msdn.microsoft.com/en-us/library/office/ff868695.aspx
mise à jour 8/10/2017 em> P> Retour sur cette réponse, j'ai réalisé que j'ai fait une mauvaise chose en liant quelque part et ne pas fournir un peu plus d'informations. P> Voici un extrait de code de ce lien MSDN ci-dessus, montrant Comment l'objet des destinataires peut être utilisé pour obtenir une adresse e-mail (l'extrait est dans VBA): p>
Merci beaucoup exactement ce dont j'avais besoin et très opportun aussi
Cet exemple semble ne plus fonctionner, comme l'URL utilisée dans le code, qui est nécessaire pour identifier la propriété d'intérêt MAPI, est en panne.
On dirait, pour les adresses électroniques en dehors de votre organisation, l'adresse SMTP est cachée dans Le code Microsoft me donnait une erreur et certaines enquêtes révèlent que la page Schema n'est plus disponible. Je voulais une liste des adresses électroniques du point de vue-la-semi-colonie dans mon organisation d'échange ou en dehors de celui-ci. En combinant avec une autre réponse S / O pour convertir les noms d'affichage des courriels de l'entreprise interne aux noms SMTP, cela fait le tour. P> e-mailObject.Recipients (i) .Address code>, bien qu'il ne semble pas vous permettre de distinguer / Cc / bcc.
Function ResolveDisplayNameToSMTP(sFromName) As String
' takes a Display Name (i.e. "James Smith") and turns it into an email address (james.smith@myco.com)
' necessary because the Outlook address is a long, convoluted string when the email is going to someone in the organization.
' source: https://stackoverflow.com/questions/31161726/creating-a-check-names-button-in-excel
Dim OLApp As Object 'Outlook.Application
Dim oRecip As Object 'Outlook.Recipient
Dim oEU As Object 'Outlook.ExchangeUser
Dim oEDL As Object 'Outlook.ExchangeDistributionList
Set OLApp = CreateObject("Outlook.Application")
Set oRecip = OLApp.Session.CreateRecipient(sFromName)
oRecip.Resolve
If oRecip.Resolved Then
Select Case oRecip.AddressEntry.AddressEntryUserType
Case 0, 5 'olExchangeUserAddressEntry & olExchangeRemoteUserAddressEntry
Set oEU = oRecip.AddressEntry.GetExchangeUser
If Not (oEU Is Nothing) Then
ResolveDisplayNameToSMTP = oEU.PrimarySmtpAddress
End If
Case 10, 30 'olOutlookContactAddressEntry & 'olSmtpAddressEntry
ResolveDisplayNameToSMTP = oRecip.AddressEntry.Address
End Select
End If
End Function
Merci, ceci est une mise à jour importante!
Les réponses ci-dessus n'ont pas fonctionné pour moi. Je pense qu'ils ne fonctionnent que lorsque le destinataire est dans le carnet d'adresses. Le code suivant est également capable de rechercher des adresses électroniques de l'extérieur de l'organisation. De plus, il fait une distinction entre TO / CC / BCC
Dim olRecipient As Outlook.Recipient Dim strToEmails, strCcEmails, strBCcEmails As String For Each olRecipient In item.Recipients Dim mail As String If olRecipient.AddressEntry Is Nothing Then mail = olRecipient.Address ElseIf olRecipient.AddressEntry.GetExchangeUser Is Nothing Then mail = olRecipient.Address Else mail = olRecipient.AddressEntry.GetExchangeUser.PrimarySmtpAddress End If Debug.Print "resolved", olRecipient.Name, mail If olRecipient.Type = Outlook.OlMailRecipientType.olTo Then strToEmails = strToEmails + mail & ";" ElseIf olRecipient.Type = Outlook.OlMailRecipientType.olCC Then strCcEmails = strCcEmails + mail & ";" ElseIf olRecipient.Type = Outlook.OlMailRecipientType.olBCC Then strBCcEmails = strBCcEmails + mail & ";" End If Next Debug.Print strToEmails Debug.Print strCcEmails Debug.Print strBCcEmails
C'est ce qui a fonctionné pour moi avec Outlook 2019. Utilisez votre nom de domaine interne. Peut-être besoin de peaufiner encore - pas fortement testé. Passez le code dans le module iOoutlookSession. (Mis à jour pour gérer les listes de distribution Exchange 7/31/20.)
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) Dim xMailItem As Outlook.MailItem Dim xRecipients As Outlook.Recipients Dim OutRec As Outlook.Recipient Dim OutTI As Outlook.TaskItem Dim i As Long Dim j As Long Dim xOKCancel As Integer Dim sMsg As String Dim oMembers As AddressEntries Dim oMember As AddressEntry Dim sDomains As String Dim sTemp As String On Error Resume Next If Item.Class <> olMail Then GoTo ExitCode sDomains = "@test1.com @test2.com" Set xMailItem = Item Set xRecipients = xMailItem.Recipients 'Loop through email recipients to get email addresses For i = xRecipients.Count To 1 Step -1 'If we have a text address entry in the email If InStr(xRecipients.Item(i).AddressEntry, "@") > 0 Then sTemp = xRecipients.Item(i).AddressEntry If InStrRev(sDomains, LCase(Mid(sTemp, InStr(sTemp, "@"), 254))) <= 0 Then sMsg = sMsg & sTemp & vbCrLf End If Else Select Case xRecipients.Item(i).AddressEntry.DisplayType Case Is = olDistList Set oMembers = xRecipients.Item(i).AddressEntry.Members For j = oMembers.Count To 1 Step -1 Set oMember = oMembers.Item(j) sTemp = oMember.GetExchangeUser.PrimarySmtpAddress If InStrRev(sDomains, LCase(Mid(sTemp, InStr(sTemp, "@"), 254))) <= 0 Then sMsg = sMsg & sTemp & vbCrLf End If Set oMember = Nothing Next j Set oMembers = Nothing Case Is = olUser Set OutTI = Application.CreateItem(3) OutTI.Assign Set OutRec = OutTI.Recipients.Add(xRecipients.Item(i).AddressEntry) OutRec.Resolve If OutRec.Resolved Then sTemp = OutRec.AddressEntry.GetExchangeUser.PrimarySmtpAddress If InStrRev(sDomains, LCase(Mid(sTemp, InStr(sTemp, "@"), 254))) <= 0 Then sMsg = sMsg & sTemp & vbCrLf End If End If Set OutTI = Nothing Set OutRec = Nothing Case Else MsgBox "Unaccomodated AddressEntry.DisplayType." GoTo ExitCode End Select End If Next i 'Display user message If Len(sMsg) > 0 Then sMsg = "This email is addressed to the following external Recipients:" & vbCrLf & vbCrLf & sMsg xOKCancel = MsgBox(sMsg, vbOKCancel + vbQuestion, "Warning") If xOKCancel = vbCancel Then Cancel = True End If End Sub
Une autre alternative de code (basée initialement sur la réponse de @andreeSdl) qui devrait pouvoir être utilisée ...
passer dans un
MailItem code> à la fonction e-mailddressinfo code> pour obtenir un tableau des champs de l'expéditeur, et CC à partir du message P> blockQuote>
xxx pré> p>
C'est bien!!! Je ne sais pas pourquoi vous n'avez pas inclus l'affaire BCC, j'espère que cela ne vous dérange pas que je l'ai ajouté.
BCC est aveugle. Les adresses ne sont pas sauvegardées, alors aucun point dans l'ajout comme un cas. Je l'ai fait à l'origine, mais je l'ai pris quand je me suis rendu compte que cela n'a pas ajouté aucune valeur.
J'ai également remarqué dans mes tests que cela n'a pas fonctionné, je serais tenté de le laisser au code, peut-être le commentaire que l'indiquant "ne fonctionne pas" ou quelque chose du genre. Grande fonction quel que soit, merci!
Cela fonctionnerait-il si j'avais l'inspection d'un e-mail que j'ai envoyé vs celui que j'ai reçu?
Je ne sais pas. Essayez-le et voyez ...