Emailversand Access

Hallo,

ein leidiges Thema, ich weiss :smiley: Hoffe aber trotzdem das ich hier geholfen werde.

Ich habe unter Access 2003 eine Tabelle in der Emailadressen hinterlegt sind. Nun möchte ich per Makro und Schaltfläche, jeder eingetragenen Emailadresse eine Mail senden, mit den jeweiligen Daten welche zu der Email gehören. Dies soll im Hintergrund geschehen.

Bsp:

BCC: [email protected]

Hallo,

ja…

– vergiß Makros.

– Per VBA und Klick-Ereignisprozedur des Buttons öffnest Du einen Recordset auf die Tabelle, durchläufst den bis zum Ende und schickst für jeden Datensatz eine Mail ab. Das könnte im einfachsten Fall mit z. B. Docmd.Sendobject passieren.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Erstmal danke für die Antwort.

Ich habe fast befürchtet das es darauf hinausläuft :smile:

Die docmd.sendobject ist mir geläufig, nur das mit dem Recordset durchlaufen verstehe ich nicht ganz, bzw verstehen schon nur die Umsetzung hapert etwas…

Hast du da vllt ein Beispiel parat, insbesondere auf das Einfügen der Werte Email und Betrag? Denn docmd.sendobjekt sendet doch nur komplette Objekte wie Tabellen oder Berichte etc… Oder verstehe ich da was falsch?

Gruss

– Per VBA und Klick-Ereignisprozedur des Buttons öffnest Du
einen Recordset auf die Tabelle, durchläufst den bis zum Ende
und schickst für jeden Datensatz eine Mail ab. Das könnte im
einfachsten Fall mit z. B. Docmd.Sendobject passieren.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

Hast du da vllt ein Beispiel parat, insbesondere auf das
Einfügen der Werte Email und Betrag? Denn docmd.sendobjekt
sendet doch nur komplette Objekte wie Tabellen oder Berichte
etc… Oder verstehe ich da was falsch?

Ja, :wink:

Private Sub btnMailSenden_Click()
On Error GoTo Err_btnMailSenden_Click
Dim rs As DAO.Recordset
Dim strBetreff As String, strText As String
strBetreff = "Ihre Abrechnung " & Me!Quartal 'besser Quartal aus einem Textfeld im Form entnehmen.

Set rs = CurrentDb.OpenRecordset(„select * from tbl_Emailadressen“, dbOpenSnapshot)
Do Until rs.EOF
strText = "Wir berechnen Ihnen " & Format(nz(rs!Betrag,0), „#,##0.00“) & " EUR für " & Me!Quartal

DoCmd.SendObject acSendNoObject, , , rs!Email, , , strBetreff, strText, False 'hier erst mal True setzen!

Loop

rs.Close
Set rs = Nothing

Exit_btnMailSenden_Click:
Exit Sub

Err_btnMailSenden_Click:
MsgBox Err.Description
Resume Exit_btnMailSenden_Click

End Sub

ohne weiteren Check auf gültige EMail-Adresse und sonstige Plausibilitäten.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz,

erstmal vielen Dank. Es hat bis auf einige Ungereimtheiten sehr gut funktioniert.

Meine Prozedur sieht folgendermassen aus:

Private Sub Befehl0_Click()

Dim rs As DAO.Recordset
Dim strBetreff As String, strText As String
strBetreff = „Ihre Abrechnung Multifunktionsgerät“ & Me!Gerätenummer

Set rs = CurrentDb.OpenRecordset(„select * from tbl_Emailadressen“, dbOpenSnapshot)
Do Until rs.EOF
strText = „Wir berechnen Ihnen " & Me!Euro & " EUR für das abgelaufene Quartal“

DoCmd.SendObject , , , rs!Email, , , strBetreff, strText, False

Loop

rs.Close
Set rs = Nothing

End Sub

Die Probleme sind nun folgende:

  1. Er sendet immer nur den ersten Datensatz und dies wiederholt (aufgrund von Loop denke ich mal)
  2. Er öffnet Outlook, und ich muss die Nachricht einzeln absenden

Fragen:

  • Wie kann ich umgehen das er nur den ersten Datensatz sendet?
  • Wie kann ich dafür sorgen das die Email ohne öffnen im Outlook
    versendet wird, und ohne die Sicherheitsabfrage ob es ein Virus ist. Bei einem Makro frägt er mich normalerweise auch nicht :wink:
    +Ist es möglich bei dem Emailtext Leerzeilen einzufügen?

Vielen Dank schonmal

Gruss

Hallo,

Private Sub Befehl0_Click()

Dim rs As DAO.Recordset
Dim strBetreff As String, strText As String
strBetreff = „Ihre Abrechnung Multifunktionsgerät“ &
Me!Gerätenummer

Set rs = CurrentDb.OpenRecordset(„select * from
tbl_Emailadressen“, dbOpenSnapshot)
Do Until rs.EOF
strText = „Wir berechnen Ihnen " & Me!Euro & " EUR für das
abgelaufene Quartal“

DoCmd.SendObject , , , rs!Email, , , strBetreff, strText,
False

rs.Movenext

Loop

rs.Close
Set rs = Nothing

End Sub

Fragen:

  • Wie kann ich umgehen das er nur den ersten Datensatz sendet?

siehe o. st. Code

  • Wie kann ich dafür sorgen das die Email ohne öffnen im
    Outlook
    versendet wird, und ohne die Sicherheitsabfrage ob es ein
    Virus ist. Bei einem Makro frägt er mich normalerweise auch
    nicht :wink:

Dafür müßte man entweder ein Hilfsprogrämmchen („ClickYes“–> gogglen) verwenden, oder Outlook fernsteuern (per Automation bedienen) oder MAPI benutzen oder ein anderes Mailprogramm oder ein anderes Mail-Objekt-Modell (z. B. CDO) verwenden.

+Ist es möglich bei dem Emailtext Leerzeilen einzufügen?

strText = „Zeile1“ & vbCrLF & vbCrLF & „Zeile3“ & vbCrLf & vbCrLf & „Zeile5“

asd

wenn ich dich nochmal belästigen darf :wink:

das mit den Leerzeilen klappt wunderbar.

Doch das Vorrücken auf den nächsten Datensatz klappt leider immer noch nicht…

wenn ich dich nochmal belästigen darf :wink:

ja :wink:

das mit den Leerzeilen klappt wunderbar.

ok

Doch das Vorrücken auf den nächsten Datensatz klappt leider
immer noch nicht…

hast Du
rs.Movenext
an der richtigen Stelle eingebaut ?
Setz mal einen Haltepunkt bei Do until rs.EOF und fahre im Einzelschritt (F8) durch die Schleife.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Also ich habe den Haltepunkt gesetzt und bin durch mit F8. Es passiert nichts anderes, als das er mir wieder nur den ersten datensatz füllt in der neuen Email.

rs.movenext habe ich genau da gesetzt, wo du es im code eingetragen hast.

Zur veranschaulichung stelle ich dir ma ne Beispieltabelle hier rein:

Email: Gerät: Betrag:
[email protected] THJ1 10 EUR
[email protected] THJ2 12,30 EUR

Somit sollte nun eine Mail erstellt werden, welche an Empfänger test geht mit seinen zugehörigen Daten und die nächste Mail sollte somit an Empfänger test1 gehen mit seinen daten…

Vllt hilft das weiter wenn du das mal so siehst :wink:

Somit ergibt sich bei mir folgender Code:

Dim rs As DAO.Recordset
Dim strBetreff As String, strText As String
strBetreff = "Ihre Abrechnung " & Me!Gerät

Set rs = CurrentDb.OpenRecordset(„select * from tbl_Emailadressen“, dbOpenSnapshot)
Do Until rs.EOF
strText = "Wir berechnen Ihnen " & Me!Betrag

DoCmd.SendObject acSendNoObject, , , rs!Email, , , strBetreff, strText, True
rs.MoveNext
Loop
rs.Close

Hallo,

naja, hast Du denn während der Einzelschritte die Inhalte der Variablen mal geprüft?

Läuft der Code über rs.MoveNext und überhaupt durch alle Datensätze?

Kann hier keinen Fehler nachvollziehen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!