Automatische Buchungsbestätigungen bei Nachricht
#1
Hallo liebes Forum,

ich habe folgenden Sachverhalt:
Für verschiedene Schulungen melden sich Mitarbeiter auf einem Terminportal bei mir an. Die Buchungsbestätigungen dieser Plattform können leider nicht sicher an alle Empfänger zugestellt werden (Spam-Filter die die Empfänger nicht anpassen können und die IT nicht möchte).
Die Buchungsbestätigungen schicke ich deshalb aktuell nochmal per Hand raus. Dazu habe ich mir ein paar Vorlagen erstellt, doch ist es immer noch mehr als mühsam und in der Eile des Gefechts zusätzlich fehleranfällig.
Über jede erfolgte Buchung bekomme ich eine Mail vom Terminportal, mit den für mich relevanten Informationen. Diese Informationen kann ich selber anhand von Variablen anordnen und auswählen.

Mein Wunschszenario:
Sobald eine Mail vom Terminportal bei mir im Posteingang eingeht, wird automatisch ein vordefinierter Text zur Buchungsbestätigung um die Variablen bei der Terminbuchung ergänzt und an die Mailadresse des Kunden - die ebenfalls als Variable in meiner Eingangs-Mail steht - verschickt. 

Plan B:

Alle Mails vom Terminportal die bei mir im Posteingang liegen, werden - per ausgelöstem Makro - nacheinander mit einem vordefinierten Text zur Buchungsbestätigung um die Variablen bei der Terminbuchung ergänzt und an die Mailadresse des Kunden - die ebenfalls als Variable in meiner Eingangs-Mail steht - verschickt. Zusätzlich sollen die bestätigten Eingangs-Mails in einen bestimmten Unterordner verschoben werden.

    Dieses Bild soll nochmal etwas anschaulicher zeigen was ich meine!
Die beiden Mails hätte ich auch angehängt, allerdings sind Attachments mit Typ .msg nicht erlaubt  Dodgy


Da ich mich bisher nur in Excel über die absoluten Grundkenntnisse weitergebildet habe, kann ich leider nicht einschätzen, ob mein Wunsch völlig utopisch oder doch mit etwas Code lösbar ist  Huh

Ich danke auf jeden Fall für Eure Unterstützung und wenn weitere Informationen benötigt werden, bitte einfach danach fragen (auch da weiß ich gar nicht was wirklich hilfreich ist...)

Gruß
Phiant
Top
#2
Hallo,

zuerst einmal muss zwischen "möglich" und deiner konkreten FRage unterschieden werden. Deshalb eine Fragen:

- können Terminbestätigungen, z.B. am "Subject" eindeutig identifiert werden
- würde der Spamfilter auch Deine EMails blocken

Vermutlich ist der Aufwand deutlich jenseits dessen, was in einem Forum möglich ist.

mfg
Top
#3
Hallo Fennek,

der Spamfilter blockiert meine Mails nicht.
Was meinst du mit eindeutiger Identifizierung am "Subject"? Zumindest der Betreff ist immer "1 neue Buchung" wie auch im Bild zu sehen und diesen Betreff bekomme ich sonst von niemandem so. 

Ich hatte schon befürchtet, dass es nicht mit ein paar Zeilen Code erledigt ist  Undecided

Gruß,
Phiant
Top
#4
Als Einstieg benötigs Du diese zwei Codes:

"ThisOutlookSession"

Code:
Private Sub Application_NewMail()
    sb_Neue_Buchung
End Sub

und in einem allgemeinen Modul:

Code:
const myML as string = "Phiant@t-online.de"

Sub sb_Neue_Buchung()
Dim EML As MailItem, IBx As Folder
    Set NSp = Application.GetNamespace("MAPI")
    Set IBx = NSp.Folders.Item(myML).Folders.Item("Posteingang")

    Set EML = IBx.Items.GetLast
        If EML.Class = olMail Then
            If InStr(1, EML.Subject, "neue Buchung", vbBinaryCompare) > 0 Then
                MsgBox "Neue Buchung"
            End If
        End If
End Sub

Anstelle der MSGBOX kommt dann der beabsichtigte Code.

PS: Das Bild habe ich eben erst gesehen. Hm...
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Phiant
Top
#5
Wenn Du an die beiden *.msg-Dateien von Hand ein ".txt" anhängst, kannst Du sie auch hochladen.

Das Bild ist jedenfalls zu schwer erkennbar.
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Phiant
Top
#6
Hallo Fennek,

jetzt also die Mailtexte als .txt:

.txt   Buchungseingang.txt (Größe: 368 Bytes / Downloads: 2) So bekomme ich die Informationen diese Mail hat immer den Betreff "1 neue Buchung"

.txt   Buchungsbestätigung Online.txt (Größe: 994 Bytes / Downloads: 2) So verschicke ich die Bestätigung. Variablen im Text sind: Wochentag, Datum, Uhrzeit und "Thema" (übernommen aus der Eingangs-Mail)

Der Code funktioniert und löst die MsgBox korrekt aus! Das ist schonmal ein guter Anfang würde ich meinen :) wenn es eine Möglichkeit gibt die Infos aus dem Mailtext "auszulesen" und an bestimmte Stellen der neuen Mail zu übertragen, ist das schwierigste geschafft.

Ich habe schon überlegt, ob sich diese Herausforderung leichter mit Excel lösen lässt. Wenn es aber darum geht, die Infos aus der erhaltenen Eingangs-Mail  "auszulesen", weiß ich auch hier nicht weiter. Wenn meine zukünftige Handarbeit einige Klicks sind, ist das schon um Welten besser als das Markieren-Löschen-Eintippen aktuell.

Auf jeden Fall ein großes Dankeschön, dass du dich der Thematik überhaupt angenommen hast  Exclamation

Gruß,
Phiant
Top
#7
Die beiden Dateien sind schwer zu lesen.

Probiere diesen Code im Einzelschritt-Modus, ob die Felder richtig getroffen werden.

Die oberste Zeile mit "const" und deiner Email-Adresse muss bleiben.

Code:
Type Buchung
    Kurs    As String
    Termin  As String
    iName   As String
    Station As String
    MA_Anz  As String
    MA_Name As String
    EMail   As String
End Type

Sub sb_Neue_Buchung()
Dim Buch As Buchung
Dim EML As MailItem, IBx As Folder
    Set NSp = Application.GetNamespace("MAPI")
    Set IBx = NSp.Folders.Item(myML).Folders.Item("Posteingang")

    Set EML = IBx.Items.GetLast
        If EML.Class = olMail Then
            If InStr(1, EML.Subject, "neue Buchung", vbBinaryCompare) > 0 Then
                Ar = Split(EML.Body, vbLf)
                Debug.Print UBound(Ar)
                Buch.Kurs = Ar(4)
                Buch.Termin = Ar(6)
                Buch.iName = Ar(8)
                Buch.Station = Ar(10)
                Buch.MA_Anz = Ar(12)
                Buch.MA_Name = Ar(14)
                Buch.EMail = Ar(16)
            End If
        End If
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Phiant
Top
#8
Hallo Fennek,

ich habe den Code um die nicht benötigten Variablen gekürzt und die Zuweisung korrigiert. Das funktioniert jetzt tatsächlich einwandfrei! Alle benötigten Infos werden abgeholt  100
Anbei mal der aktuelle Code:

Code:
Type Buchung
    Kurs    As String
    Termin  As String
    MA_Name As String
    EMail   As String
End Type

Sub sb_Neue_Buchung()
Dim Buch As Buchung
Dim EML As MailItem, IBx As Folder
    Set NSp = Application.GetNamespace("MAPI")
    Set IBx = NSp.Folders.Item(myML).Folders.Item("Posteingang")

    Set EML = IBx.Items.GetLast
        If EML.Class = olMail Then
            If InStr(1, EML.Subject, "neue Buchung", vbBinaryCompare) > 0 Then
                Ar = Split(EML.Body, vbLf)
                Debug.Print UBound(Ar)
                Buch.Kurs = Ar(2)
                Buch.Termin = Ar(3)
                Buch.MA_Name = Ar(7)
                Buch.EMail = Ar(8)
            End If
        End If
End Sub
Jetzt geht es "nur" noch darum, die gesammelten Variablen in einer neuen Mail an die richtigen Stellen einzusetzen. Ich kopiere nachher meinen bisherigen "Versandcode" aus Excel mal hier rein, eventuell ist das schon eine gute Vorlage.

Vielen Dank nochmal!
Top
#9
Hallo Fennek,

ich habe den Code um die nicht benötigten Variablen gekürzt und die Zuweisung korrigiert. Das funktioniert jetzt tatsächlich einwandfrei! Alle benötigten Infos werden abgeholt  100
Anbei mal der aktuelle Code:

Code:
Type Buchung
    Kurs    As String
    Termin  As String
    MA_Name As String
    EMail   As String
End Type

Sub sb_Neue_Buchung()
Dim Buch As Buchung
Dim EML As MailItem, IBx As Folder
    Set NSp = Application.GetNamespace("MAPI")
    Set IBx = NSp.Folders.Item(myML).Folders.Item("Posteingang")

    Set EML = IBx.Items.GetLast
        If EML.Class = olMail Then
            If InStr(1, EML.Subject, "neue Buchung", vbBinaryCompare) > 0 Then
                Ar = Split(EML.Body, vbLf)
                Debug.Print UBound(Ar)
                Buch.Kurs = Ar(2)
                Buch.Termin = Ar(3)
                Buch.MA_Name = Ar(7)
                Buch.EMail = Ar(8)
            End If
        End If
End Sub
Jetzt geht es "nur" noch darum, die gesammelten Variablen in einer neuen Mail an die richtigen Stellen einzusetzen. Ich kopiere nachher meinen bisherigen "Versandcode" aus Excel mal hier rein, eventuell ist das schon eine gute Vorlage.

Hier nochmal mein Code, den ich benutze um mein Reporting zu versenden:
Code:
Sub Reporting_versenden()

Dim objOutlook As Object
Dim objMail As Object

Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)

With objMail
  .To = ThisWorkbook.Worksheets("Reportings").Range("B3")
'Als Empfänger müsste jetzt Buch.EMail aus der obigen Abfrage eingesetzt werden.
    .Subject = ThisWorkbook.Worksheets("Reportings").Range("D3")
'Betreff müsste "Buchungsbestätigung Online Training" & Buch.Termin von oben 
  .BodyFormat = 2
  .GetInspector
  .HTMLBody = "<span style='font-family:Calibri;font-size:11.5pt;'>" _
            & "Hallo Frau ...,<br><br>" _
            & "anbei erhalten Sie mein Reporting für diese Woche.<br><br>" _
            & "Mit besten Grüßen</span>" & .HTMLBody
'Hier müsste an den entsprechenden Textstellen Buch.Kurs, Buch.Termin und Buch.MA_Name eingefügt werden.
    .Display
'Funktioniert seit Update auf Office365 leider nicht mehr als .send, den Workaround über .sendbutton (?!) habe ich noch nicht in Angriff genommen.
End With
End Sub

Ich habe hier im Code mal nachträglich kommentiert, wo ich denke, dass Anpassungen nötig sind. Allerdings bin ich in dem Thema noch nicht wirklich so fit, das vernünftig einschätzen zu können.

Vielen Dank vorab für die nächste Unterstützung  Angel

Gruß,
Phiant

P.S.: Der obere Beitrag konnte nicht mehr editiert werden, kann daher gelöscht werden.
Top
#10
Also die Antwort hatte ich mir in den Code-Kommentaren wohl schon selbst gegeben ;)

Mit dem Makro werden jetzt die benötigten Infos geholt, an der richtigen Stelle eingesetzt und ich kann die Mail mit einem Klick verschicken!

Was jetzt noch toll wäre, wenn die Mail nach .display automatisch in meinen Unterordner "Webinare" vom Posteingang verschoben wird. Hier im Forum habe ich nichts dazu gefunden und die Google-Recherche ergibt ganz schöne Code-Klötze die ich tatsächlich nicht verstehe bzw. nicht erkenne, was ich davon nutzen kann  Huh

Habe es doch hinbekommen  18

Der bisherige Code schaut jetzt so aus:
Code:
Const myML As String = "phiant@phiant.com"

Type Buchung
    Kurs    As String
    Termin  As String
    MA_Name As String
    EMail   As String
End Type

Sub sb_Neue_Buchung()
Dim Buch As Buchung
Dim EML As MailItem, IBx As Folder
    Set NSp = Application.GetNamespace("MAPI")
    Set IBx = NSp.Folders.Item(myML).Folders.Item("Posteingang")
    Set Webinare = NSp.Folders.Item(myML).Folders("Posteingang").Folders("Webinare")
    Set EML = IBx.Items.GetLast
        If EML.Class = olMail Then
            If InStr(1, EML.Subject, "neue Buchung", vbBinaryCompare) > 0 Then
                Ar = Split(EML.Body, vbLf)
                Debug.Print UBound(Ar)
                Buch.Kurs = Ar(2)
                Buch.Termin = Ar(3)
                Buch.MA_Name = Ar(7)
                Buch.EMail = Ar(8)
                EML.Move Webinare
            End If
        End If
       
Dim objOutlook As Object
Dim objMail As Object

Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)

With objMail
  .To = Buch.EMail
  .Subject = "Buchungsbestätigung: " & Buch.Termin
  .BodyFormat = 2
  .GetInspector
  .HTMLBody = "<span style='font-family:Calibri;font-size:11.5pt;'>" _
            & "Sehr geehrte Teilnehmerin, sehr geehrter Teilnehmer,<br><br>" _
            & "vielen Dank für Ihre Anmeldung zum <b>" & Chr(34) & Buch.Kurs & Chr(34) & "</b>, für " & Buch.MA_Name & ".<br>" _
            & "Das Training findet am <b>" & Buch.Termin & " Uhr </b>statt. <br><br>" _
            & "Treten Sie per Computer, Tablet oder Smartphone durch Klicken des folgenden Links bei: <br>" _
            & "</span><span style='font-family:Calibri;font-size:13.5pt;'>" _
            & "<b><a href=""https://adresse...."">Zum Login</a></b></span>" _
            & "<span style='font-family:Calibri;font-size:11.5pt;'><br><br>" _
            & "Sie können sich auch über ein Telefon einwählen. <br>" _
            & "Deutschland: +49 ... <br>" _
            & "Code: ... <br><br>" _
            & "Bei Rückfragen antworten Sie bitte auf diese Mail.<br><br>" _
            & "Mit besten Grüßen</span>" & .HTMLBody
    .Display
End With
End Sub
Wie kann die ausgelesene Mail abschließend automatisch verschoben werden? (erledigt mit 2 zusätzlichen Zeilen)
Das wäre noch eine große Hilfe  Exclamation

Kann aus dem Code eine Schleife gemacht werden, damit automatisch alle Buchungen im Posteingang nacheinander ausgelesen werden? (Luxusproblem, ein paar Mal das Makro anklicken ist um Welten besser, als mein bisheriger Aufwand.) 
Ich bin erstmal zufrieden mit dem Ergebnis, nochmal vielen Dank Fennek für die Unterstützung und die richtigen Impulse zum weiterdenken!

Gruß,
Phiant
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste