Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1848to1852
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Problem mit SentOnBehalfOfName

Problem mit SentOnBehalfOfName
13.10.2021 09:19:55
Martin
Ich verwende in Excel diesen Code, um in einem Postfach die Absender von Mails zu ermitteln:

Sub Auslesen()
' open the inbox
Dim ol As Outlook.Application
Dim ns As Namespace
Set ol = New Outlook.Application
Set ns = ol.GetNamespace("MAPI")
Dim inbox As MAPIFolder
Set inbox = ns.Session.Folders("Name des Postfachs").Folders("Posteingang")
Dim outlook_item As Object
Dim Alias As String
For Each outlook_item In inbox.Items
' only look at emails
If outlook_item.Class = olMail Then
Alias = GetAlias(outlook_item, ns)
lz = Cells(65536, 1).End(xlUp).Row
For i = 2 To lz
If Range("A" & i) = Alias Then
Range("M" & i) = "ja"
If outlook_item.UnRead Then
outlook_item.UnRead = False
End If
End If
Next i
End If
Next outlook_item
End Sub

Function GetAlias(outlook_item As Outlook.MailItem, ns As Outlook.Namespace) As String
On Error GoTo err_handler
Dim email_address As String
Dim Alias as String
email_address = outlook_item.SentOnBehalfOfName
' if it's an Exchange format address
If UCase(outlook_item.SenderEmailType) = "EX" Then
' create a recipient
Dim recip As Outlook.Recipient
Set recip = ns.CreateRecipient(outlook_item.SentOnBehalfOfName)
' extract the Alias
Dim user As Outlook.ExchangeUser
Set user = recip.AddressEntry.GetExchangeUser()
Alias = user.Alias
GetAlias = Alias
Exit Function
Else
MsgBox "Für die private email-Absenderadresse " & email_address & " konnten keine Outlookdaten ermittelt werden."
End If
err_handler: MsgBox "Für " & email_address & " konnte kein Alias ermittelt werden"
End Function
Mit SenderEmailAddress anstelle von SentOnBehalfOfName würde es problemlos funktionieren. Viele Mitarbeiter senden aber über die Stellvertreter-Funktion eine Mail "im Auftrag von" für ihre Kollegen, und nur deren Namen interessieren mich dann.
Nun kriege ich bei SentOnBehalfOfName nur den displayName geliefert, also z.B. "Meier, Max". Wenn es im Adressbuch noch einen weiteren ähnlichen Eintrag gibt wie z.B. "Meier, Max (München)" dann crasht der Code in GetAlias. Wenn ich "Meier, Max" manuell in eine neue Outlook Mail als Empfänger setze, kommt eine Abfrage, ob ich "Meier, Max" oder "Meier, Max (München)" meine. Das ist wahrscheinlich der Grund, warum der Code crasht. Gibt es eine Möglichkeit, beim Setzen des recipients diese Abfrage zu unterdrücken bzw. automatisch den Eintrag auszuwählen, der exakt dem vorgegebenen Namen entspricht?

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit SentOnBehalfOfName
15.10.2021 17:34:27
Yal
Hallo Martin,
Du musst dich in das Objekt-Modell von Outlook (Verweis auf "Microsoft Outlook x.x Library") und die Unterschied zwischen dem MailItem.Sender, Objekt vom Typ AddressEntry,
https://docs.microsoft.com/de-de/office/vba/api/outlook.mailitem.sender
https://docs.microsoft.com/de-de/office/vba/api/outlook.addressentry
und den Eigenschaft MailItem.SenOnBehaltOf, was nur einen String ist. Siehe Objektkatalog (F2).
Wenn nicht im Namen von anderen gesendet, haben dann MailItem.Sender.Address und MailItem.SentOnBehalfOf dieselbe Wert.
Wenn im Vertretung, dann hast Du einen String. Daraus kannst Kein nicht eindeutig jemand identifiezieren, es sei denn, Du hast von diese Person eine Mail jemals bekommen, und so der Link zwischen String und Objekt.
Viel Erfolg
VG
Yal
Anzeige
AW: Problem mit SentOnBehalfOfName
16.10.2021 10:38:12
Martin
Vielen Dank für die Erläuterung.
Dann wäre der richtige Weg jetzt:
-Prüfung, ob die Mail "im Auftrag von" gesandt wurde (SentOnBehalfOfName vorhanden)
-wenn ja, prüfen, ob mit dem zurückgegebenen String für SentOnBehalfOfName (=displayName) ein Empfänger und sein Alias gefunden wird
-gefunden: alles ok
-nicht gefunden (=Fehler): über Errorhandler dann den Alias aus SenderEmailAddress ermitteln
-wenn nein (nicht im Auftrag einer anderen Person gesendet): Alias gleich aus SenderEmailAddress ermitteln
Jetzt ist für mich nur die Frage, wie ich ermittle, ob die Mail im Auftrag von jemandem versandt wurde, denn wie Du richtig schreibst, ist SentOnBehalfOfName auch dann vorhanden, wenn das nicht erfolgte. Dann wird wahrscheinlich ein String mit dem displayName des Absenders zurückgegeben?
Ich kann ja nicht Objekt und String vergleichen.
Anzeige
nur ne Idee...
16.10.2021 16:27:46
Oberschlumpf
Hi Martin,
ich hab nur eure Texte gelesen. Ich hab mir weder deine Datei angeschaut, und ich hab mich auch nicht näher mit Outlook-VBA-Objekten befasst.
Du schreibst: "Ich kann ja nicht Objekt und String vergleichen."
Ich weiß aber (Outlook is vllt Ausnahme), jedes Objekt (Label, Textbox, ComboBox, usw) hat die Text-Eigenschaft.
Und wäre dann der Vergleich...

If Outlook.Text = MailItem.SenOnBehaltOf Then
hier dein Code
End If
...zwischen Objekt und String nicht doch möglich?
Wie gesagt, nur ne Idee.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Problem mit SentOnBehalfOfName
19.10.2021 11:49:35
Yal
Hallo Martin,
SentOnBehalfOfName ist immer befüllt. Wenn aber SentOnBehalfOfName = MailItem.Sender.AddressEntry, dann sendet der Sender in seinem eigenen Namen.
Wenn nicht, hast Du vom Vertretenen nur eine Adresse (also string, kein "Objekt") und kann daher keine zusätzliche Information über den Chef/Vertretenen bekommen.
Ich würde alle Mails durchgehen, dabei die Versender als Objekt sammeln (Collection). Dann hast für jeden bekannte Versender den Name, die Adresse und die ID (falls Intern). Key diese Collection muss der Name sein.
Dann gehst Du nochmals über alle Mails und wenn ein "SentOnBehalfOfName MailItem.Sender.AddressEntry", dann in diese Liste mit den Namen die fehlende Information suchen.
VG
Yal
Anzeige
AW: Problem mit SentOnBehalfOfName
20.10.2021 18:33:17
Martin
Ich habe es jetzt so gelöst, dass ich zuerst für SenderEmailAdress mir den Anzeigenamen hole:
Set recip = ns.CreateRecipient(outlook_item.SenderEmailAddress)
recip.Resolve
If recip.Resolved Then
displayName = recip.name
End If
Danach prüfe ich, ob outlook_item.SentOnBehalfOfName displayName ist. Nur wenn das der Fall ist, erzeuge ich dann noch einen recipient für outlook_item.SentOnBehalfOfName und hole mir dann dessen Userdaten. Das crasht bei etlichen Mitarbeitern, wenn der Name nicht eindeutig ist, aber da ich das dann ja nur noch in den wenigen Fällen mache, wo die Mail überhaupt "im Auftrag von" gesandt wurde, sind das dann nur noch wenige Fälle, für die ich mir über einen error handler eine Fehlermeldung ausgeben lasse.

Function GetAliasFromMail(outlook_item As outlook.MailItem, ns As outlook.Namespace) As String
On Error GoTo err_handler
Dim Alias As String
Dim displayName As String
Dim user As outlook.ExchangeUser
Dim recip As outlook.Recipient
' if it's an Exchange format address
If UCase(outlook_item.SenderEmailType) = "EX" Then
'create a recipient
Set recip = ns.CreateRecipient(outlook_item.SenderEmailAddress)
recip.Resolve
If recip.Resolved Then
displayName = recip.name
' extract the Alias
Set user = recip.AddressEntry.GetExchangeUser()
Alias = user.Alias
Else
MsgBox "Alias für " & outlook_item.SenderEmailAddress & " (" & outlook_item.SenderEmailAddress & ") konnte nicht ermittelt werden"
End If
If outlook_item.SentOnBehalfOfName  displayName Then 'Mail wurde im Auftrag gesandt
' create a recipient
Set recip = ns.CreateRecipient(outlook_item.SentOnBehalfOfName)
' extract the Alias
Set user = recip.AddressEntry.GetExchangeUser()
Alias = user.Alias
End If
GetAliasFromMail = Alias
Exit Function
Else
MsgBox "Für die private email-Absenderadresse " & outlook_item.SentOnBehalfOfName & " (" & outlook_item.SenderEmailAddress & ") konnten keine Outlookdaten ermittelt werden."
End If
err_handler:     MsgBox "Für " & outlook_item.SentOnBehalfOfName & " (" & outlook_item.SenderEmailAddress & ") konnte kein Alias ermittelt werden"
End Function

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige