Mail mit Anhang senden

Hallo.
Ich versuche, mit Basic eine Mail mit Anhang zu versenden, was erst einmal ohne Fehlermeldung klappt. Es fehlt aber der Anhang.
Hier mein Code:


Sub Mail_senden
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
Dim session As Variant
session = CreateScriptService("Session")
dim str, body, file as string
Mailtext="Sehr geehrte" & CHR(13) & "Damen und Herren" & "Hier einiger Text."_
 & CHR(13) & CHR(13) & "Schon jetzt herzlichen Dank." & CHR(13) & CHR(13) & "Viele Grüße," &  CHR(13) &  "Ihr Absender"
str="Someone@example.com"
Anhang="file:///media/Daten/Test/Test-237.pdf"
session.SendMail(str,  , , "Betreff",Mailtext, Anhang)
end sub

Ich habe es auch schon ohne “file://” probiert. Keine Änderung.
Auch die Zeilenumbrüche werden nicht umgesetzt, so dass der Text als ein langer Satz erscheint.
Kann man das ändern?

Ich verwende KDE neon mit LO 7.6.2.1 und Thunderbird 115.4.2

Schon jetzt danke für Denkanstöße:-)
Uli

Mit Anhang geht das nur sicher über Mailmerge. Der Code, den ich gerade nutze, ist deutlich länger, da ich meine Inhalte auch noch aus einer Datenbank ziehe. Ich versuche das einmal auf das Wesentliche zu kürzen:

SUB Mail_Aufruf(oEvent AS OBJECT)
	REM Mailaufruf mit Simpel Mail Message
	REM Funktioniert mit Attachments
	DIM ar()
	DIM attachs()
	oForm = oEvent.Source.Model.Parent
	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
	stFeld2 = oFeld2.Text
	stFeld3 = oFeld3.Text
	REM Variante mit Anhängen. Es muss unter Extras → Optionen → Internet → E-Mail das passende Mailprogramm angegeben werden.
	IF GetGuiType() = 1 THEN
		oMailer = createUnoService("com.sun.star.system.SimpleSystemMail")
	' Sonst Linux/Mac
	ELSE
		oMailer = createUnoService("com.sun.star.system.SimpleCommandMail")
	END IF
	oMailProgramm = oMailer.querySimpleMailClient()
	oNeueNachricht = oMailProgramm.createSimpleMailMessage()
	oNeueNachricht.setRecipient(stFeld1)
	oNeueNachricht.setSubject(stFeld2)
	oNeueNachricht.Body = Str(stFeld3)
    DIM attachs(0)
    attachs(0) = "file:///media/Daten/Test/Test-237.pdf"
    oNeueNachricht.setAttachement(attachs())
    oMailprogramm.sendSimpleMailMessage(oNeueNachricht, 0 )
END SUB

Für das Attachment habe ich jetzt einfach Deinen Pfad eingesetzt. Das lese ich hier über die Datenbank aus und fühe ggf. auch mehrere Attachments über ein Array hinzu. Die Datenbankfelder kannst Du raus nehmen, ebenso die Nachfrage nach dem auslösenden Ereignis. Aus den Feldnamen siehst Du, wozu welcher Inhalt gehört.

Das mit den Zeilenumbrüchen hat eine Person, der ich das Ganze weitergereicht habe, auch gehabt. Da liegt etwas am Mailprogramm, vor allen an den Einstellungen, wie Du Mails verfasst. Bei mir ist das der Thunderbird und reine Textmails. Und wenn Du in die Windowswelt kommst, dann reicht vielleicht CHR(13) nicht aus. Da kann es dann die Kombination mit CHR(13) und CHR(10) sein.

Edit: Code korrigiert, da Attachments in einem Array angegeben werden.

1 Like

Hallo Robert.
Vielen Dank für die rasche Antwort.
Leider kommt in der Zeile

oNeueNachricht.setAttachement("file:///media/Daten/Test/Test-237.pdf")

die Fehlermeldung “Objektvariable nicht belegt”
Ich sehe nicht, welche Variable nicht belegt sein soll.
Übrigens: es gibt eine Anleitung für den Code, den ich geschickt habe:https://help.libreoffice.org/latest/en-US/text/sbasic/shared/03/sf_session.html?&DbPAR=BASIC#SendMail

Ich habe die Ursache für den Fehler gefunden. Es muss heißen:

DIM attachs(0)
attachs(0) = "file:///media/Daten/Test/Test-237.pdf"
oNeueNachricht.setAttachement(attachs())

so steht es auf Seite 110 des Handbuches "Base_09_Makros.
Aber dann wird kein Anhang an Thunderbird übergeben.

Ja, das mit dem Array habe ich nicht richtig wieder gegeben. Das Fülle ich in der Prozedur ja anders. Die Anhänge gehen dann aber problemlos. Ich lese den Pfad schließlich so aus, dass er mit dem übereinstimmt, mit dem ich gerade vorher eine *.pdf-Datei erstellt habe.

Wenn der Anhang nicht weiter gegeben wird: Du hast tatsächlich in diesem Pfad die Datei liegen? Ich kenne kein System, das im Ursprungsverzeichnis das Verzeichnis “media” liegen hat.

Die Datei existiert. Wenn ich als Pfad eine nicht existente Datei nehme, erhalte ich eine Fehlermeldung. Ich habe auch eine Datei unter Home/Benutzer/Dokumente ausprobiert.

Ich habe bei mir für die Benennung des Pfades einen etwas anderen Weg. Ich lese zuerst den Pfad für das aktuelle Dokument aus, dann packe ich den Dateinamen für den Anhang daran und lasse beides durch ConvertToUrl laufen.

Lade doch hier noch einmal Deinen jetzt getesteten Code hoch. Dann probiere ich das bei mir mit einer Datei im Homeverzeichnis aus.

…und: Schreibe nicht immer eine Antwort. Das sind keine Antworten auf die Frage, die Du da schreibst, sondern Wege zu der Antwort. Einfach Kommentare hinzufügen reicht.

Ich habe convertourl jetzt auch eingefügt. Bringt aber nichts.
Hier mein Code:

SUB Mail_Aufruf
	REM Mailaufruf mit Simpel Mail Message
	REM Funktioniert mit Attachments
	DIM ar()
	DIM attachs(0)
	Adresse="test@test.de"
	Betreff="Dokument"
	Mailtext="Sehr geehrte" & CHR(13) & "im Anhang finden Sie Ein Dokument mit der Bitte um Erledigung."_
 & CHR(13) & CHR(13) & "Schon jetzt herzlichen Dank." & CHR(13) & CHR(13) & "Viele Grüße," &  CHR(13) &  "Max Musterman"
	
	oMailer = createUnoService("com.sun.star.system.SimpleCommandMail")
	oMailProgramm = oMailer.querySimpleMailClient()
	oNeueNachricht = oMailProgramm.createSimpleMailMessage()
	oNeueNachricht.setRecipient(Adresse)
	oNeueNachricht.setSubject(Betreff)
	oNeueNachricht.Body = Str(Mailtext)
    attachs(0) = ConvertToUrl("file:///home/uli/Dokumente/Test.pdf")
    
    oNeueNachricht.setAttachement(attachs())
    oMailprogramm.sendSimpleMailMessage(oNeueNachricht, 0 )
END SUB

Ich habe das ohne ConvertToUrl getestet. Gebe ich eine falsche Adresse an, so beschwert sich das Mailprogramm (Thunderbird). Ist die Adresse korrekt, so ist der Anhang an der Mail.

Da ist etwas am Kontakt zum Mailprogramm nicht in Ordnung. Ich habe so etwas hier, wenn mir jemand mit einem iPhone eine Mail mit Anhang schickt. Da sehe ich gar nicht dass da ein Anhang dran ist. Ich muss dann erst vom reinen Textmodus aus zum einfachen HTML-Moduis wechseln um das geregelt zu bekommen. Dein Mailprogramm ist mit meinem unter OpenSUSE 15.4 identisch…

Danke für Deine Hilfe :slightly_smiling_face:
Dein Tipp könnte richtig sein. Wenn ich mit dem Standard-Dateimanager im Kontext-Menu eine Datei senden mit… auswählen möchte, erscheint das gar nicht.
Dann werde ich mal in einem Linux-Forum nachfragen.

Man kann mit einer richtigen Programmiersprache richtige Emails senden. Erstes Suchergebnis für “Python Email Attachment”: python - How to send email attachments? - Stack Overflow
Die verwendeten Bibliotheken sind allesamt Teil von LibreOffice Python, so dass das auch als Makro plattformübergreifend funktioniert.

Nicht falsch, aber mir fällt auf, dass Du nur Deinen Desktop KDE angegeben hast, aber weder die Distribution, noch ob irgendwelche beteiligten aus Snap, Flatpack, Appimage agieren müssen. Da gibt es schon diverse Fehlerquellen…

Das Makro selbst funktioniert nicht nur hier einwandfrei - mit Anhang. Neben SuSE auch getestet mit Ubuntu.

& CHR(13) reicht aber bei einer Mail in HTML-Format nicht aus. Da muss es dann schon & CHR(13) & CHR(10) sein. Nur ergibt das bei dem Kollegen, der mit Ubuntu arbeitet, dann einen Text, der ab dem ersten Absatz plötzlich im Betreff erscheint …

Hinweis:
Mit Ubuntu scheint es da aktuelle einige Besonderheiten zu geben, die vielleicht auch hier helfen können. In Ubuntu darf bei Extras → Optionen → Internet → EMail kein Eintrag stehen. Sonst wird gar kein Mailprogramm geöffnet. Ubuntu öffnet immer das Standardmailprogramm.
Thunderbird 115.4.1 ist bei Ubuntu so verhunzt, dass der Mailtext endet, wenn ein Komma erscheint. Außerdem auch noch das Verhalten mit Mailtext im Betreff … Wird stattdessen Evolution installiert und als Standard-Mailprogramm gesetzt, so funktioniert das Ganze einwandfrei.
Das ganze hat also nichts mit LibreOffice und nach meiner Erfahrung mit Thunderbird unter OpenSUSE auch nichts mit Thunderbird zu tun, sondern mehr mit der Art, wie das in Ubuntu eingebaut wird.