Seite 1 von 1

[gelöst] Senden PDF an E-Mail

Verfasst: Fr 27. Jun 2025, 14:21
von nostromo
Hallo!

ich habe mit dem Makro-Rekorder nachfolgendes Makro erhalten....

Code: Alles auswählen

sub Main

dim document   as object
dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dispatcher.executeDispatch(document, ".uno:SendMailDocAsPDF", "", 0, Array())

end sub
Daher die Funktion unter DATEI | SENDEN | PDF als E-Mail..

Das funktioniert soweit auch gut, ich würde nur gerne eine Empfänger E-Mail in dem Makro mit übergeben.
Kann mir das jemand sagen oder einen Tipp geben wo ich das finden könnte!?

Danke

Re: Senden PDF an E-Mail

Verfasst: Mo 30. Jun 2025, 20:55
von mikele
Hallo,
teste mal

Code: Alles auswählen

sub Main

dim document   as object
dim dispatcher as object
dim props(0) As New com.sun.star.beans.PropertyValue

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
props(0).Name="Recipient"
props(0).Value="deine_adresse@mailer.org"

dispatcher.executeDispatch(document, ".uno:SendMailDocAsPDF", "", 0, props)

end sub

Re: Senden PDF an E-Mail

Verfasst: Mo 7. Jul 2025, 09:58
von nostromo
mikele hat geschrieben:
Mo 30. Jun 2025, 20:55
Hallo,
teste mal
Hi mikele,

sorry, dass ich erst jetzt reagiere - hatte übersehen, dass du geantwortet hast.
Der Code macht genau das, was ich grundlegend möchte - danke dafür.

Was mir bei der Programmierung u.a. von LO immer schwer fällt ist das Wissen um die Möglichkeiten der API.
Mir fehlt irgendwie das Verständis und der passende Zugriff auf die notwendigen Infos.

Mich würde auch die Möglichkeit interessieren andere Dinge an das E-Mail Programm zu übergeben.

- Der Betreff wird von LO automatisch aus dem Dateinamen gebildet - wie könnte das z.B. abweichend erfolgen?
- Ein 2. E-Mail Empfänger in CC bzw. BCC wäre auch toll...
- Weiterhin würde ich gerne den Inhalt der E-Mail, einen Textblock übergeben, der den Anhang genauer beschriebt.


Hintergrundinfo:

Ich versuche mit LO-Calc einen Leistungsnachweis (Zeit & Materialerfassung) für unsere Techniker zu realisieren.
Dieser soll dann als E-Mail an den Kunden geschickt werden.

Mir ist klar, dass mir hier niemand meinen Job abnehmen kann. Meine Tätigkeit ist jedoch auch ein Mittel die Übermacht von Produkten aus Redmond in Unternehmen zu reduzieren. Dies gelingt mir mit den derzeitigen Anforderungen und weiteren positiv abgeschlossenen Projekten sehr gut.
Unsere GF fragt nicht mal mehr ob das nicht besser mit Excel & Co. gehen würde...
Die Frage ist eher wie Lange brauchst du um das Problem mit LO zu lösen!?

In diesem Sinn Danke für die Unterstützung meinerseits werden ich gleich eine Spende für dieses Forum machen ....

Re: Senden PDF an E-Mail

Verfasst: Mo 7. Jul 2025, 22:24
von mikele
Hallo,
die API pur begreife ich bis heute nicht wirklich (um die Eigenschaften und Methoden eines Objektes herauszubekommen muss man ganz schön wühlen).
Für dein Problem würde ich zweischrittig vorgehen:
1. Eine pdf erstellen und abspeichern.
2. Diese pdf versenden.
Hier hatte wir schon mal etwas ähnliches.
Zum Vorschlag:

Code: Alles auswählen

Sub mail_versand

	'Zugriff auf das Dokument
	oDoc=ThisComponent
	'Ersetzt .odt durch .pdf
	sDocURL = oDoc.getURL()
	sPDFURL = Left$(sDocURL,Len(sDocURL) - 4) + ".pdf"
	'Speichert als PDF im selben Verzeichnis
	Dim args(0) As New com.sun.star.beans.PropertyValue
	args(0).Name = "FilterName"
	'für den Fall, dass es eine Calc-Datei ist: "calc_pdf_Export"
	args(0).Value = "writer_pdf_Export" 
	oDoc.storeToURL(sPDFURL, args())
	
	'Mailversand
	'Sender als String
	sFrom="vvv.vvv@zzz.com"
	'Empänger als String
	sTo="xxx.yyy@zzz.de"
	'Betreff als String
	sSubject="test"
	'CC als Array
	sCC=array("aaa.bbbb@zzz.de", "ccc.ddd@zzz.de")
	'BCC als Array
	sBcc=array("eee.fff@zzz.de", "ggg.hhh@zzz.de")
	'Anhang als Array von vollständigen Dateinamen mit Pfad im URL-Format
	sAttach=array(converttourl(sPDFURL))
	'Nachricht als String
	sBody="hallo"
	'Mail generieren und senden
	MailAgent = CreateUnoService("com.sun.star.system.SimpleCommandMail")
	MailClient = MailAgent.querySimpleMailClient()
	MailMessage=MailClient.createSimpleMailMessage()
	MailMessage.setOriginator(sFrom)
	MailMessage.setRecipient(sTo)
	MailMessage.setSubject(sSubject)
	MailMessage.setAttachement(sAttach)
	Mailmessage.Body=sBody
	mailmessage.setBccRecipient(sBcc)
	mailmessage.setCcRecipient(sBcc)
	MailClient.sendSimpleMailMessage(MailMessage, 0)




End Sub

Re: Senden PDF an E-Mail

Verfasst: Di 8. Jul 2025, 12:31
von nostromo
mikele hat geschrieben:
Mo 7. Jul 2025, 22:24
Hallo,
die API pur begreife ich bis heute nicht wirklich (um die Eigenschaften und Methoden eines Objektes herauszubekommen muss man ganz schön wühlen).
Für dein Problem würde ich zweischrittig vorgehen:
1. Eine pdf erstellen und abspeichern.
2. Diese pdf versenden.
Hier hatte wir schon mal etwas ähnliches.
...
Hi mikele,

das Makro ist noch viel besser - ich werde es noch etwas anpassen müssen,
komme jetzt mit deiner Hilfe noch viel weiter!

Mit dem 1. Makro hatte ich zumindest mit normalen E-Mail-Clients keine Probleme.
Ich hatte dann aber festgestellt, dass es mit der "neuen" Outlook-Version nicht funktionierte.

Mal schauen was mit dem 2. Makro passiert - ich berichte dann...

Danke!

Re: Senden PDF an E-Mail

Verfasst: Mo 14. Jul 2025, 17:21
von nostromo
mikele hat geschrieben:
Mo 7. Jul 2025, 22:24
Hallo,
die API pur begreife ich bis heute nicht wirklich (um die Eigenschaften und Methoden eines Objektes herauszubekommen muss man ganz schön wühlen).
Für dein Problem würde ich zweischrittig vorgehen:
1. Eine pdf erstellen und abspeichern.
2. Diese pdf versenden.
Hier hatte wir schon mal etwas ähnliches.
Zum Vorschlag:

Code: Alles auswählen

Sub mail_versand
'..

End Sub
Hi mikele,

ich habe das Makro soweit integriert, dass es genau das macht, was es machen soll.
Es funktioniert unter Linux KDE/plasma, Fedora 1A!

Leider funktioniert der Aufruf des E-Mail Client unter Windows nicht.
Unter Linux wird sowohl KMail als auch Thunderbird, je nachdem welche App als Standard eingestellt ist, aufgerufen.

Es kommt jedoch unter Windows 10 / 11 zu dieser Meldung:
LO-Makro-Fehler-Windows.png
LO-Makro-Fehler-Windows.png (13.59 KiB) 1598 mal betrachtet

... natürlich habe ich die Separatoren entsprechend behandelt. Der String der URL ist immer richtig!
Das PDF wird erzeugt und liegt in dem Verzeichnis.

Es gibt wohl grundlegende Probleme mit dem MailTo unter Windows...
.. somit wohl nicht unbedingt mit dem Makro direkt!?

Getestet habe ich das auf 3 verschiedenen PC mit Windows 10 pro und Windows 11 pro...
Auch ist das Java OpenJDK Runtime von MS ist installiert und aktiviert in LO.

Trotz versuchsweiser Installation von Thunderbird unter Windows, Outlook sollte es eigentlich sein, und der entsprechenden Konfiguration als Standard-EMail-Client kommt es zu dem Fehler bei Ausführung der Methode.

Den E-Mail-Client mit einem PowerShell-Skript aufzurufen führt auch nur zu Problemen mit den Sicherheitseinstellungen.
Python-Skript ebenso ...

Hinweis: Version LO: 24.2.3.2

Hast du / jemand ggf. eine Idee?

Re: Senden PDF an E-Mail

Verfasst: Di 15. Jul 2025, 11:23
von mikele
Hallo,
unter Windows muss man (wohl) den anderen Service nutzen:

Code: Alles auswählen

MailAgent = CreateUnoService("com.sun.star.system.SimpleSystemMail")

Re: Senden PDF an E-Mail

Verfasst: Mo 21. Jul 2025, 09:50
von nostromo
mikele hat geschrieben:
Di 15. Jul 2025, 11:23
Hallo,
unter Windows muss man (wohl) den anderen Service nutzen:

Code: Alles auswählen

MailAgent = CreateUnoService("com.sun.star.system.SimpleSystemMail")
Hi mikele,

das scheint wirklich die Lösung zu sein!

Zumindest habe ich auf einem Windows 10 Pro mit dem NEW Outlook aus dem M365-Paket eine E-Mail mit dem Makro und dem geänderten MailAgent erstellen können.

Ich werde daher weiter testen und den Code soweit anpassen das ggf. je nach OS eine andere Methode verwendet wird.
Danke