🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Mail aus Base mit Daten schicken per Makro

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
pingpong
Beiträge: 22
Registriert: Fr 4. Apr 2014, 04:45

Mail aus Base mit Daten schicken per Makro

Beitrag von pingpong » Fr 4. Apr 2014, 05:02

Hallo, ich bin neu hier.
Ich habe vor ca 1 Monat mit LO angefangen und musste mich sofort als Anfänger in die Makroprogrammierung stürzen. Da hat mir dieses Forum und Grrgle sehr geholfen. Jetzt geht´s aber mal gerade nicht mehr weiter.
Ich möchte en Makro haben, welches aus einem Base Formular eine Mail an eine Feste Adresse schickt. Soweit hab ich es schon. Es soll aber in der Mail auch Daten aus dem aktuellen Base Formular sein.

Stand der Dinge:

Sub SendMailNeu
Dim oDoc as Object
DIM oForm as Object
DIM oSubForm_Tel as Object
DIM sEmpf as String
DIM sBetreff as String
DIM sAnred as String
DIM sMail_Adr as String
DIM attA as String
DIM OS

'attN = "C:\Ordner\" & "Test.pdf" 'Anhang beifügen
attA = ConvertToURL (attN)
sEmpf = "poporkel@poperkel.pom"
sBetreff = "Sie haben Post" 'Betreffzeile
sAnred = "RUF! MICH! AN!"


shell("C:\Program Files\Mozilla Thunderbird\thunderbird.exe",1,"-compose to=" + sEmpf +",attachment=" + attA + ",subject=" + sBetreff + ",body=" + sAnred)

End Sub

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von Wanderer » Fr 4. Apr 2014, 09:02

Hallo,

nützlich wäre erstmal zu wissen, wieviel funktioniert.
Dem "soweit hab ich es schon" würde ich entnehmen, daß Thunderbird sich öffnet und auch die Adresse übernommen wird.

Werden auch die restlichen Daten (abgesehen vom auskommentierten Attachment) übernommen, wäre Deine Frage, wie Du auf Datenbankfelder zugreifen kannst.
Oder hast Du noch Probleme bei der Übergabe an Thunderbird?

MfG, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von RobertG » Fr 4. Apr 2014, 17:04

Hallo Pingpong,

da Du nicht aufzeigst, wo genau es hakt, hier einfach einmal stumpf die Methode, mit der ich das hier zum Laufen gebracht habe:

Code: Alles auswählen

SUB Mail_Aufruf
	REM Mailaufruf mit mailto:Empfänger?subject=...&body=...&cc=...&bcc=...
	REM Die letzten beiden Eingaben sind im Formular nicht aufgeführt
	REM Anhänge sind laut Definition von "mailto" nicht definiert. Manchmal funktioniert allerdings "attachment="
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oFeld1 AS OBJECT
	DIM oFeld2 AS OBJECT
	DIM oFeld3 AS OBJECT
	DIM oFeld4 AS OBJECT
	DIM oShell AS OBJECT
	DIM stFeld1 AS STRING
	DIM stFeld2 AS STRING
	DIM stFeld3 AS STRING
	DIM stFeld4 AS STRING
	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm=oDrawpage.Forms.getByName("Formular")
	oFeld1=oForm.getByName("E_Mail_Adresse")
	oFeld2=oForm.getByName("E_Mail_Betreff")
	oFeld3=oForm.getByName("E_Mail_Inhalt")
	stFeld1=oFeld1.Text
	IF stFeld1 = "" THEN
		msgbox "Keine Mailadresse vorhanden." & CHR(13) & "Das Mailprogramm wird nicht aufgerufen" , 48, "Mail senden"
		EXIT SUB
	END IF
	REM Die Konvertierung zu URL ist notwendig, da sonst Sonderzeichen und Zeilenumbrüche nicht übernommen werden
	REM Die überflüssigen Einträge file:/// werden dabei wieder herausgeschnitten
	stFeld2=Mid(ConvertToUrl(oFeld2.Text),9)
	stFeld3=Mid(ConvertToUrl(oFeld3.Text),9)
	REM Start des Files mit der entsprechenden URL-Verbindung
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	oShell.execute("mailto:"+stFeld1+"?subject="+stFeld2+"&body="+stFeld3,,0)
END SUB
Die Inhalte bezieht das Makro aus einem Formular. Die Namen der Felder sind im Formular festgelegt. Es wird das Mailprogramm gestartet, das das Standardmailprogramm des Systems ist.
Entsprechende Hinweise habe ich in das Makro geschrieben (z.B. zu Anhängen).
Die Mailadresse wird hierbei nicht auf Gültigkeit überprüft - nicht einmal vom Ansatz her. Ich würde zumindest nach einem "@" im Text suchen lassen, wenn ich so etwas wirklich in Datenbanken einsetzen würde - allerdings würde ich das schon bei der Eingabe in das Feld erledigen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

pingpong
Beiträge: 22
Registriert: Fr 4. Apr 2014, 04:45

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von pingpong » Fr 4. Apr 2014, 17:26

Hallo Jörn,
danke für die schnelle Antwort.
Es funktioniert jetzt beim Ausführen des makros:
Eine abzusendende Mail öffnet sich. Im Empfänger steht "poporkel@poperkel.pom", Im Betreff steht "Sie haben post" und in der Mail steht "Ruf! Mich! An".
Alles super soweit. Ich habe mir das aus einem "Foren-Makro" rauskopiert.
Jetzt möchte ich, daß aus dem Formular (in dem der Button ist, mit dem ich das Makro auslöse) ein paar Einträge us den Formularfeldern in die Mail geschrieben werden.

pingpong
Beiträge: 22
Registriert: Fr 4. Apr 2014, 04:45

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von pingpong » Fr 4. Apr 2014, 17:50

Hallo Robert,
danke das sieht schonmal gut aus. Ich hatte nicht erwähnt daß es sich um einen oder mehrere feste Mail empfänger handelt. Die Adressen, sowie auch der Betreff müssen (erstmal) nicht aus dem Formular ausgelesen werden, sondern sind fest im Makro. Ich möchte anderen Text aus den Formularfeldern in der Mail haben.
Frage:Was bedeutet "Lage des Feldes"? Ist damit die Reihenfolge der FormularSteuerElemente gemeint ?
Das Makro von dir hakt schon bei :"oDrawpage=oDoc.Drawpage"
da gibt´s dann:BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: Drawpage.

Und ich muß noch mitteilen:
LibreOffice 4.1.5.3 auf Win 7 (32/64)

dankeschön

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von RobertG » Fr 4. Apr 2014, 19:57

Hallo Pingpong,

das Makro wird aus einem Formular innerhalb von Base heraus aufgerufen.
Das Formular hat (im Formularnavigator) den Namen "Formular". Die Felder in diesem Formular haben die Namen "E_Mail_Adresse" usw. Das Makro wird an einen Button in diesem Formular gebunden. Der Inhalt der Felder wird ausgelesen und weiter gegeben. Dient also dazu, z.B. aus einer Adressdatenbank heraus eine Mail zu starten - mit abgespeicherter Mailadresse, abgespeichertem Betreff und abgespeichertem Inhalt in der Datenbank.
Eine Beispieldatenbank dazu liegt dem aktuellen Handbuch bei: Beispiel_Mailstart_Dateiaufruf.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

pingpong
Beiträge: 22
Registriert: Fr 4. Apr 2014, 04:45

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von pingpong » Sa 5. Apr 2014, 06:03

Jaa Robert,
Das bringt mich um Einiges weiter, vielen Dank! Ich muß hier aber noch mal erwähnen, dass ich Anfänger bin und die Sache mit den Makros nur wie eine Art Lego benutzen kann. Also mit fertigen Bausteinen. Ich bin aber noch nicht in der Lage, die Steine zurecht zu sägen oder Pömpel obendrauf zu kleben.
Ich habe mal das Makro eingebaut und die Felder aus dem "MailStart" in mein Formular kopiert, läuft bestens.
Am Ende möchte ich aber keine Mailadresse eingeben, sondern es gibt einen festen Verteiler mit den Adressaten. Das werde ich hinkriegen.
In den Betreff sollte ein fester Text, z.B. "Reklamation". Schaffe ich auch.
Jetzt kommt´s:
Dann zu dem festen Text "Reklamation" noch den Inhalt eines Feldes wie "Kunde"
Und wie sage ich dem Makro jetzt, dass es nicht den Inhalt aus "MailInhalt" in den Mailinhalt schreibt, sondern den Inhalt aus Feldern namens "Auftrag Nr", "Stückzahl" "Artikel" usw?

Also:
Mail an feste Adressaten: elke@popelke.com; silke@popelke.com
Betreff: Reklamation "Trebartz van Elst"
Inhalt: Auftrag Nr "1000" "1" "Badewanne" "nicht nass genug"

Man (Frau) möge mir hier nicht Hetze unterstellen, alle Namen im obigen Text wurden durch den von mir entworfenen RANDOMISATOR zufällig generiert! ;)

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von RobertG » Sa 5. Apr 2014, 09:50

Hallo pingpong,

Du siehst ja in dem Makro, wie auf das eine Feld "Mailinhalt" zugegriffen wird:

Code: Alles auswählen

oFeld3=oForm.getByName("E_Mail_Inhalt")
Jetzt hast Du mehrere Felder. Also einfach weiter aneinanderreihen

Code: Alles auswählen

oFeld3=oForm.getByName("AuftragNummer")
oFeld4=oForm.getByName("Stückzahl")
oFeld4=oForm.getByName("Artikel")
Dann gibt es die Umwandlung in URL-fähige Schreibweise:

Code: Alles auswählen

stFeld3=Mid(ConvertToUrl(oFeld3.Text),9)
Die muss jetzt stattfinden, nachdem die Texte zusammengefügt werden:

Code: Alles auswählen

stFeld3=Mid(ConvertToUrl(oFeld3.Text+oFeld4.Text+oFeld5.Text),9)
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

pingpong
Beiträge: 22
Registriert: Fr 4. Apr 2014, 04:45

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von pingpong » So 6. Apr 2014, 08:07

Ja das hat geholfen!
Ich bin jetzt wieder viel weiter. Gut ist auch, dass Du mir nicht einfach den Fisch gibst, sondern die Angel!
Mir ist aber noch nicht klar, wie ich einen "festen" CC einbaue. Oder wie ich die festen Mailempfänger hintereinander in die Adresszeile kriege, zB.: aa@bb.de; bb@bb.de; ee@bb.de usw.
Und wie kann ich aus einem Listenfeld mit Einfachauswahl auslesen?

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Mail aus Base mit Daten schicken per Makro

Beitrag von RobertG » So 6. Apr 2014, 09:38

Hallo pingpong,
pingpong hat geschrieben: Mir ist aber noch nicht klar, wie ich einen "festen" CC einbaue.
Schau Dir den Start des Makros an:

Code: Alles auswählen

REM Mailaufruf mit mailto:Empfänger?subject=...&body=...&cc=...&bcc=...
Jetzt weiter unten den Aufruf:

Code: Alles auswählen

oShell.execute("mailto:"+stFeld1+"?subject="+stFeld2+"&body="+stFeld3,,0)
Hier kannst Du jetzt erweitern. Definiert in mailto sind nur die obigen Begriffe.

Code: Alles auswählen

oShell.execute("mailto:"+stFeld1+"?subject="+stFeld2+"&body="+stFeld3+"&cc=balu@dschungel.com",,0)
pingpong hat geschrieben:Oder wie ich die festen Mailempfänger hintereinander in die Adresszeile kriege, zB.: aa@bb.de; bb@bb.de; ee@bb.de usw.
In der Aufrufzeile steht stFeld1 als Variable. stFeld1 ist bei Dir "aa@bb.de;bb@bb.de;ee@bb.de"
pingpong hat geschrieben:Und wie kann ich aus einem Listenfeld mit Einfachauswahl auslesen?
Das, was angezeigt wird, ermittelst Du über den ausgewählten Eintrag

Code: Alles auswählen

oControl = oForm.getByName("Name des Listenfelds")
stEintrag = oControl.ValueItemList( oControl.SelectedItems(0) )
Ob Du oControl oder oFeld oder sonst etwas schreibst ist egal. Das "o" deutet darauf hin, dass es sich bei der Variablen um ein Objekt handelt. Das s bei stEintrag auf eine STRING-Variable. Solche Variablen sollten zu Beginn eines Makros definiert werden.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten