Registriert seit: 06.12.2015
Version(en): 2016
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
Registriert seit: 24.01.2020
Version(en): 365
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 Gruß, Phiant
Registriert seit: 06.12.2015
Version(en): 2016
12.05.2021, 14:20
(Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2021, 14:23 von Fennek.)
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:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
• Phiant
Registriert seit: 06.12.2015
Version(en): 2016
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:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
• Phiant
Registriert seit: 24.01.2020
Version(en): 365
Hallo Fennek, jetzt also die Mailtexte als .txt:
Buchungseingang.txt (Größe: 368 Bytes / Downloads: 2)
So bekomme ich die Informationen diese Mail hat immer den Betreff "1 neue Buchung"
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 Gruß, Phiant
Registriert seit: 06.12.2015
Version(en): 2016
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:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
• Phiant
Registriert seit: 24.01.2020
Version(en): 365
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 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!
Registriert seit: 24.01.2020
Version(en): 365
20.05.2021, 12:20
(Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2021, 12:22 von Phiant.)
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 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 Gruß,PhiantP.S.: Der obere Beitrag konnte nicht mehr editiert werden, kann daher gelöscht werden.
Registriert seit: 24.01.2020
Version(en): 365
21.05.2021, 15:35
(Dieser Beitrag wurde zuletzt bearbeitet: 21.05.2021, 15:35 von Phiant.)
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 Habe es doch hinbekommen 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 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
|