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 ...