Seite 1 von 2
Email versenden mit Makro
Verfasst: Do 3. Apr 2014, 13:42
von xundeenergie
Hi!
Ich möchte gerne aus einem Makro heraus ein Email versenden. Das soll sowohl unter Linux wie auch Windows funktionieren (und am Mac auch...)
Dazu habe ich folgenden Code gefunden:
Code: Alles auswählen
sPMUA = "/usr/bin/icedove"
sEmail = "empfaenger@example.example"
sSubject = "Ich bin ein Betreff"
sAttachment="file:///path/to/att1,file:///path/to/att2"
sBody = "Hallo ich bin der Body"
sMessage = sPMUA & _
" -compose to=" & sEmail & _
",bcc=user@example.example" & _
",subject='" & sSubject & "'" & _
",attachment='"& sAttachment & "'" & _
",preselectid=id10" & _
",body='" & sBody & "'"
Shell(sMessage)
Das Funktioniert auch schön. Mit icedove/thunderbird wird ein neues Composer-Fenster geöffnet, Subject, Body, die Empfänger (to und bcc), und die Absender-ID und die Attachments eingetragen und ausgewählt.
Dann hab ich das hier gefunden
https://issues.apache.org/ooo/show_bug.cgi?id=121579
Und das hier
Code: Alles auswählen
MailAgent = CreateUnoService("com.sun.star.system.SimpleCommandMail")
MailClient = MailAgent.querySimpleMailClient()
MailMessage=MailClient.createSimpleMailMessage()
MailMessage.setRecipient(sTo)
MailMessage.setSubject(sSubject)
MailMessage.setAttachement(array(sPDFURL))
MailClient.sendSimpleMailMessage(MailMessage, 0)
Ich kann mit
aber keinen BCC-Empfänger setzen, und mit setBody auch keinen Body. Da kommt die Fehlermeldung, dass die Variable nicht belegt wäre... (sBcc habe ich aber definiert und belegt!!)
Ist meine Lösung schon die "beste"? Ich bin mir nicht sicher, denn ich tät schon irgendwie gerne auf den Shell-Befehl verzichten und die Interna von LO nutzen.
Wie mache ich es richtig?
Re: Email versenden mit Makro
Verfasst: So 7. Feb 2016, 18:17
von scientific
Knappe 2 Jahre später bin ich wieder beim selben Problem...
Diesmal mit LO 5.0.5.1 und icedove 38.5.0 nur werden mit SimpleCommandMail keine Attachments akzeptiert. Ich kann Empfänger und Subject eintragen, das Mail wird erstellt. Sobald ich aber ein Attachment als Array einfüge, ist sowohl subject als auch Empfänger leer, sowie auch Attachments sind nicht im Mail... Und das aber nur, wenn Leerzeichen oder Umlaute im Pfad sind.
Das Setzen von BCC und CC aber auch des Bodys funktioniert. (Sofern eben kein Attachment mit Umlaut/Leerzeichen im Pfad angehängt werden soll).
Re: Email versenden mit Makro
Verfasst: So 7. Feb 2016, 19:32
von gogo
evtl. geht's, wenn du statt dem Pfad die URL nimmst.
Ansonsten: Anhänge ohne Leerzeichen in den /tmp/ oder C:\Temp\ kopieren und dann anhängen.
mit Icedove/Thunderbird sollte das funktionieren: (siehe:
https://www.thunderbird-mail.de/lexicon ... underbird/)
Code: Alles auswählen
thunderbird -compose"to='a@a.com,b@b.com',subject='Test',attachment='/tmp/File1,/tmp/File2'"
... nur außen doppelte Hochkommas, innen nur einfache, keine Leerzeichen um die trennenden Beistriche, keine Semikolons verwenden...
Re: Email versenden mit Makro
Verfasst: So 7. Feb 2016, 19:47
von scientific
Hi Gogo!
Danke für Deine Antwort.
Wären es nur die Leerzeichen, wär es ja kein Problem, das über das Temp-Verzeichnis zu lösen. Da aber auch Umlaute Probleme bereiten, ist das ganze nicht so einfach. Ich müsste dann nämlich auch Dokumente mit geändertem Filenamen versenden.
Und die Lösung mit dem Aufruf von Thunderbird explizit über die Shell ist auch nicht optimal, da der Mailversand sowohl mit Thunderbird, Icedove (die Debian-Version von Thunderbird), aber auch Outlook in verschiedenen Versionen stattfinden soll.
Ich hab schon einmal für ein Projekt eine Lösung mit Thunderbird explizit gemacht, da man bei Thunderbird auch verschiedene Identitäten als Absender auswählen kann, was wiederum Outlook nicht kann.
Dieses Feature ist hier nicht notwendig. Aber Leerzeichen und Umlaute in Filenamen/pfaden sind ja jetzt nicht so außergewöhntlich. SimpleCommandMail verlangt außerdem eh die Codierte Url-Darstellung... auch so werden die Attachements nicht korrekt behandelt.
Ich nehm mal an, das ist ein Bug.
lg scientific
Re: Email versenden mit Makro
Verfasst: So 7. Feb 2016, 20:20
von swolf
Hallo,
Aber Leerzeichen und Umlaute in Filenamen/pfaden sind ja jetzt nicht so außergewöhntlich.
Nein, dass Menschen Fehler machen, ist nicht außergewöhlich. Bekannte Probleme muss man aber nicht provozieren.
Dass Sonderzeichen, Umlaute, Leerzeichen im Dateinamen/Verzeichnisnamen Probleme machen, kommt oft vor.
http://www.ianus-fdz.de/it-empfehlungen/dateibenennung
http://wordpress.z-dbackup.de/blog/2014 ... hnisnamen/
http://www.macvillage.de/blog/2009/11/2 ... s-problem/
https://de.wikipedia.org/wiki/Dateiname
Re: Email versenden mit Makro
Verfasst: So 7. Feb 2016, 20:33
von scientific
Ich weiß nicht, ob ich es als Mensch mit Deutscher Muttersprache als Fehler qualifizieren soll, dass ich den deutschen Zeichensatz vollumfänglich nutze. Mir persönlich ist schon bewusst, dass ASCII-Zeichen am wenigsten Probleme bereiten. Aber ich hege den Anspruch, dass sich Programmierer den sprachlichen Gegebenheiten anzupassen haben, und nicht die Sprache den Programmierergewohnheiten.
Abgesehen davon ist das Problem der Umlaute schon vielfach gelöst. Auch innerhalb von Libreoffice funktioniert das bereits. Wozu gibt es die URL-Codierung, wenn sie hier im konkreten Fall nicht funktioniert?
Ja ich weiß, dass LO FOSS ist. Und ich kann nicht erwarten, dass... aber ich kann mir wünschen, dass beim Versand eines Emails der Pfad und Dateiname genauso behandelt wird, wie beim Speichern eines Dokumentes...
lg scientific
Re: Email versenden mit Makro
Verfasst: So 7. Feb 2016, 23:55
von swolf
Ja ich weiß, dass LO FOSS ist. Und ich kann nicht erwarten, dass... aber ich kann mir wünschen,
FOSS oder nicht, ist für für das Thema 'Dateinamen' unerheblich, LO ist nun mal kein Betriebssystem.
Ich habe dir noch Links raus gesucht,
aus denen, hoffe ich, deutlich wird, dass es eine
Angelegenheit der Betriebssysteme ist,
hier Windows:
https://www.fh-brandenburg.de/dateinamenuntermic.3.html
hier Ubuntu - "Dateinamen":
https://wiki.ubuntuusers.de/Unterschiede_zu_Windows/
und Mac:
https://support.apple.com/de-de/HT202808
Re: Email versenden mit Makro
Verfasst: Mo 8. Feb 2016, 00:03
von mikele
Hallo,
grundsätzlich funktioniert schon alles, was du möchtest.
Die URLs müssen halt Rfc1738-conform sein. Darum kümmert sich die Funktion ConvertToUrl().
Body wird direkt als Attribut angesprochen und die BCC (auch CC) werden in ein Array gepackt.
So lies sich thunderbird zum Start bei mir "überreden" (nun hab' ich auch gelernt, wie ich per Makro 'ne Mail verschicke

)
Code: Alles auswählen
sTo="xxx.yyy@zzz.de"
sSubject="test"
sBcc=array("aaa.bbbbw@zzz.de", "ccc.ddd@zzz.de")
sPDFURL1="/home/user/Dokumente/Dokumente user/spaß/lösung für alles.pdf"
sAttach=array(converttourl(sPDFURL))
sBody="hallo, hallo"
MailAgent = CreateUnoService("com.sun.star.system.SimpleCommandMail")
MailClient = MailAgent.querySimpleMailClient()
MailMessage=MailClient.createSimpleMailMessage()
MailMessage.setRecipient(sTo)
MailMessage.setSubject(sSubject)
MailMessage.setAttachement(sAttach)
Mailmessage.body=sBody
mailmessage.setbccrecipient(sBcc)
MailClient.sendSimpleMailMessage(MailMessage, 0)
Re: Email versenden mit Makro
Verfasst: Mo 8. Feb 2016, 23:27
von scientific
mikele hat geschrieben:Hallo,
grundsätzlich funktioniert schon alles, was du möchtest.
Die URLs müssen halt Rfc1738-conform sein. Darum kümmert sich die Funktion ConvertToUrl().
Body wird direkt als Attribut angesprochen und die BCC (auch CC) werden in ein Array gepackt.
So lies sich thunderbird zum Start bei mir "überreden" (nun hab' ich auch gelernt, wie ich per Makro 'ne Mail verschicke

)
Code: Alles auswählen
sTo="xxx.yyy@zzz.de"
sSubject="test"
sBcc=array("aaa.bbbbw@zzz.de", "ccc.ddd@zzz.de")
sPDFURL1="/home/user/Dokumente/Dokumente user/spaß/lösung für alles.pdf"
sAttach=array(converttourl(sPDFURL))
sBody="hallo, hallo"
MailAgent = CreateUnoService("com.sun.star.system.SimpleCommandMail")
MailClient = MailAgent.querySimpleMailClient()
MailMessage=MailClient.createSimpleMailMessage()
MailMessage.setRecipient(sTo)
MailMessage.setSubject(sSubject)
MailMessage.setAttachement(sAttach)
Mailmessage.body=sBody
mailmessage.setbccrecipient(sBcc)
MailClient.sendSimpleMailMessage(MailMessage, 0)
Nun... unter Windows fügt dieser Service die Dokumente mit Umlauten und Leerzeichen im Pfad zu einem Outlook-Mail hinzu.
Unter Linux funktioniert es mit Icedove nicht. Die selbe Funktion.
Ich kann leider Thunderbird auf Windows nicht testen.
Die Umwandlung "convertToUrl" hab ich natürlich in mein Skript eingebaut. Ich frag mich momentan, ob es an Linux oder Thunderbird/Icedove liegt. Oder ob LO unter Linux anders funktioniert als unter Windows.
Unter welchem OS hast du das Skript getestet mikele?
Re: Email versenden mit Makro
Verfasst: Di 9. Feb 2016, 15:50
von mikele
Hallo,
läuft bei mir unter Ubuntu12.04 und Thunderbird38.5.1