zwilland
Goto Top

VBA generierter Mailversand über Outlookclient direkt, oder über Exchange?

Hallo zusammen,
ein Kollege hat Mails aus Access via VBA (CreateObject(“Outlook.Application”)) über einen Outlook Client versendet.
Die Mails werden im VBA Programmcode zusammengestellt: Text, betreff und empfänger.
Eine Authentifizierung wird im Programmcode nicht vorgenommen. Die Mails werden so an Outlook übergeben und mit dem jeweiligen User der unter dem Outlook, das an Exchange angebunden ist versendet. Die Mails werden unter "Gesendete Elemente" im Outlookclient eingetragen und versendet. Wir wollen wissen ob die Mails über Exchange überhaupt versendet werden da ich im Exchange Message Tracking Log keine Einträge dazu habe?
Wenn ich mir dazu den Header (die Headerauszüge wurden ausgelesen nachdem Sie versendet und beim Empfänger geöffnet wurden) eines dieser Mails ansehe, sehe ich im Unterschied zu im Outlookclient verfassten Mails keine Einträge die auf Exchange hindeuten wie z.B:
X-MS-Exchange-Organization-AVStamp-Enterprise: 1.0
X-MS-Exchange-Organization-AuthSource:
Die per VBA verfassten Mails enthalten nur diese Zeilen.
From: xxx@xxx>
To: "xxx>
Subject: xxx
Thread-Topic: xxx
Thread-Index: xxx
Date: Tue, 12 Apr 2016 11:57:50 +0000
Content-Language: de-DE
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
Content-Type: multipart/related;
boundary="_004_7473807778747677796869696680696973797667807277786573667_";
type="multipart/alternative"
MIME-Version: 1.0
Jetzt wird hier im Raum geworfen, dass es immer über Exchange sendet sobald über einen an Exchange angebundenen Outlookclient etwas versendet wird. Meines Wissens ist das so nicht richtig, jetzt die Frage wo gibt es außer dem Exchange Message Tracking Log noch Protokolle die das eindeutig Protokollieren über welchen Weg eine Mail versendet wird?
LG Andy

Content-Key: 304012

Url: https://administrator.de/contentid/304012

Printed on: April 18, 2024 at 17:04 o'clock

Member: Henere
Henere May 09, 2016 at 11:02:56 (UTC)
Goto Top
Wenn im Outlook kein anderes Profil mit einem anderen Mailserver eingetragen ist... welchen Weg sollte die Mail dann sonst nehmen ?

Grüße, Henere
Member: Clijsters
Clijsters May 09, 2016 at 12:45:55 (UTC)
Goto Top
Hallo Andy,
[...] über einen Outlook Client versendet.
Dann nimmt er - wenn vorhanden - auch den Exchange Server zum Versand.

Soweit wurde dazu bereits alles wichtige von @Henere gesagt. Ergänzend:

Ein kompletter Header zeigt den Mailverlauf (Also die SMTP-Relays) im Regelfall an.
Folgender Schnipsel von hier illustriert das:
(Siehe Received-Werte)
[...]
Envelope-To: user@example.com
Delivery-Date: Tue, 25 Jan 2011 15:31:01 -0700
Received: from po-out-1718.google.com ([72.14.252.155]:54907) by cl35.gs01.gridserver.com with esmtp (Exim 4.63) (envelope-from <mt.kb.user@gmail.com>) id 1KDoNH-0000f0-RL for user@example.com; Tue, 25 Jan 2011 15:31:01 -0700
Received: by po-out-1718.google.com with SMTP id y22so795146pof.4 for <user@example.com>; Tue, 25 Jan 2011 15:30:58 -0700 (PDT)
Received: by 10.141.116.17 with SMTP id t17mr3929916rvm.251.1214951458741; Tue, 25 Jan 2011 15:30:58 -0700 (PDT)
Received: by 10.140.188.3 with HTTP; Tue, 25 Jan 2011 15:30:58 -0700 (PDT)
Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:mime-version:content-type;
[...]

Das heißt nicht, dass es nicht möglich wäre, einen spezifischen SMTP-Server zu definieren. (Beispiele)

Beste Grüße
Dominique
Member: Zwilland
Zwilland May 09, 2016 at 14:35:28 (UTC)
Goto Top
Hallo Dominique, hallo Henere, vielen Dank für die Antworten. Da sind die Besonderheiten, zum einen ist kein Eintrag im Exchange Message Tracking Log zum anderen fehlen diese gesendeten Mails in Outlook unter "Gesendete Elemente" wenn der User sich auf einen anderen Client per RomingProfiles anmeldet und dann wie schon geschrieben kann ich im Header der betreffenden Mail keine eigenen Exchange Server feststellen.

Wenn ich mir den Code ansehe wie die Mails erzeugt sehe ich auch keinen anderen smtp Server:


Option Compare Database
Option Explicit

Private Const olMailItem = 0

Sub pEMailVersand(pEinAA As String, Optional pEinCC As String = "", Optional pEinBCC As String = "", Optional pEinBetreff As String = "kein Betreff", _  
            Optional pEinBody As String = "kein Text", Optional pEinFiles As Variant, Optional pEinFileNamen As Variant, _  
            Optional pEinDirektVers As Boolean = False, Optional pEinSignatur As String = vbNullString)
  On Error GoTo pFehler
  Dim pOutlook As Object
  
  Set pOutlook = CreateObject("Outlook.Application")  
  
  If Not pOutlook Is Nothing Then
    Set pOutlook = Nothing
    If IsMissing(pEinFiles) Then
      pVersand_Outlook pEinAA, pEinCC, pEinBCC, pEinBetreff, pEinBody, , , pEinDirektVers, pEinSignatur
    Else
      pVersand_Outlook pEinAA, pEinCC, pEinBCC, pEinBetreff, pEinBody, pEinFiles, pEinFileNamen, pEinDirektVers, pEinSignatur
    End If
  Else
    Set pOutlook = Nothing
    MsgBox "Derzeit ist auf Ihrem System kein E-Mail-Versand möglich"  
  End If
  
pEnde:
  Exit Sub
  
pFehler:
  MsgBox Err.Description, 16, "Fehlerroutine"  
  Resume pEnde
End Sub

Sub pVersand_Outlook(pEinAA As String, pEinCC As String, pEinBCC As String, pEinBetreff As String, pEinBody As String, _
                Optional pEinFiles As Variant, Optional pEinFileNamen As Variant, Optional pEinDirektVers As Boolean = False, _
                Optional pEinSignatur As String = vbNullString)
  On Error GoTo pFehler
  Dim pOutlook As Object
  Dim pMail As Object
  Dim i As Integer, strFiles As String, tmpFile As String, tmpVerz As String, tmpDatei As String, strSignaturBody As String, strSignaturFile As String
  Dim Pos1 As Long, Pos2 As Long, BodyHTML As String
  
  strFiles = ""  
  Set pOutlook = CreateObject("Outlook.Application")  
  Set pMail = pOutlook.createitem(olMailItem)
  
  With pMail
    If pEinBetreff <> "" Then .subject = pEinBetreff  
    If pEinAA <> "" Then .To = pEinAA  
    If pEinCC <> "" Then .cc = pEinCC  
    If pEinBCC <> "" Then .bcc = pEinBCC  
    'Anlagen hinzufügen  
    If Not IsMissing(pEinFiles) Then
      For i = 1 To UBound(pEinFiles)
        If Not pEinFiles(i) = vbNullString Then
          On Error Resume Next
          .Attachments.Add pEinFiles(i)
          If Err.Number <> 0 Then
            Err.Clear
            tmpVerz = left(pEinFiles(i), InStrRev(pEinFiles(i), "\"))  
            tmpDatei = Right(pEinFiles(i), Len(pEinFiles(i)) - InStrRev(pEinFiles(i), "\"))  
            tmpFile = Dateiauswahl(tmpVerz, tmpDatei)
            If tmpFile = "" Then  
              MsgBox "Sie haben diese Datei '" & tmpDatei & "' nicht ausgewählt."  
            Else
              .Attachments.Add tmpFile
            End If
          End If
          On Error GoTo pFehler
        End If
      Next i
      For i = 1 To UBound(pEinFileNamen)
        If Not pEinFileNamen(i) = vbNullString Then
          strFiles = strFiles & " * " & pEinFileNamen(i) & vbNewLine  
        End If
      Next i
    Else
      strFiles = vbNullString
    End If
    .BodyFormat = olFormatHTML
    .display
    Pos1 = InStr(1, LCase(.HTMLBody), "<body")  
    Pos2 = InStr(Pos1, LCase(.HTMLBody), ">")  
'    VBA.SendKeys "^{HOME}", True  
    If strFiles <> "" Then  
      BodyHTML = mID(.HTMLBody, 1, Pos2 + 0) & "<font face=Futura Lt BT><span style=""font-size:12pt"">" & pEinBody & vbNewLine & vbNewLine & strFiles & "</span></font>" & mID(.HTMLBody, Pos2 + 1)  
'      BodyHTML = Mid(.HTMLBody, 1, Pos2 + 0) & "<font face=arial><span style=""font-size:11pt"">" & Replace(pEinBody, Chr(13), "<br />") & vbNewLine & vbNewLine & strFiles & "<br /></span></font>" & Mid(.HTMLBody, Pos2 + 1)  
'      .HTMLBody = Replace(pEinBody, Chr(13), "<br />") & vbNewLine & vbNewLine & strFiles & vbNewLine & .HTMLBody '& vbNewLine & vbNewLine & strSignaturBody  
      .HTMLBody = BodyHTML
    Else
      BodyHTML = mID(.HTMLBody, 1, Pos2 + 0) & "<font face=Futura Lt BT><span style=""font-size:12pt"">" & pEinBody & "</span></font>" & mID(.HTMLBody, Pos2 + 1)  
'      BodyHTML = Mid(.HTMLBody, 1, Pos2 + 0) & "<font face=arial><span style=""font-size:11pt"">" & Replace(pEinBody, Chr(13), "<br />") & "<br /></span></font>" & Mid(.HTMLBody, Pos2 + 1)  
'      .HTMLBody = Replace(pEinBody, Chr(13), "<br />") & vbNewLine & vbNewLine & .HTMLBody '& strSignaturBody  
      .HTMLBody = BodyHTML
    End If
'    .display  
'    If pEinAA <> "" Then  
'      If pEinSignatur <> "keine Signatur vorhanden" Then  
'        On Error Resume Next  
'        VBA.SendKeys "^{END}", True   'Setzt den Cursor ans Ende der E-Mail  
''          .getinspector.CommandBars.Item("Insert").Controls("Signatur").Controls(pEinSignatur).Execute  
''        BodyHTML = "<table border=0 width=""100%"" style=""Color: #0000FF""" & _  
''               " bgColor=#F0F0F0><tr><td align= ""center"">" & .Body & "</td>" & _  
''               "</tr></table><br>"  
'        .HTMLBody = .Body & strSignaturBody  
'      End If  
'    End If  
    If pEinDirektVers Then
      .send
    End If
  End With
  
pEnde:
  Set pMail = Nothing
  Set pOutlook = Nothing
  Exit Sub
  
pFehler:
  MsgBox Err.Description, 16, "Fehlerroutine"  
  Resume pEnde
End Sub


Die Frage ist jetzt wie kann ich feststellen über welchen Weg die Mails raus sind. Ich werde jetzt nochmals per VBA und per Outlook "Neues Mail" an eine Adresse senden und das hier posten. Vielleicht hat jemand eine Idee dazu

LG Andy
Member: Henere
Henere May 09, 2016 at 19:47:47 (UTC)
Goto Top
Sende die Mail mal an einen externen Empfänger und schau dir dann dir Header an.
Member: Zwilland
Zwilland May 09, 2016 at 20:00:45 (UTC)
Goto Top
Hallo Henere, ja hab ich heute machen lassen und sind anders als an jenem besagten Tag heute gleich vom Sendeweg über Exchange. Da stimmt was nicht ich muss das morgen selber inizieren. ich meld mich morgen nochmal dazu