Termineinladungen auf Kommandozeile verschicken

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Termineinladungen auf Kommandozeile verschicken

Beitrag von Tintom » 21.04.2017 00:37:00

Hallo,
ich möchte einen Termin an mehrere Empfänger verschicken. Wenn ich das über die Webmaske meines Emailproviders einrichte bekommt der Empfänger automatisch einen Kalendereintrag geschickt. Versuche ich es manuell indem ich eine Email mit angehängter .ics-Datei verschicke, kommt beim Empfänger auch nur eine Email mit angehängter Datei an.

Was macht der Mailprovider anders als ich?

LG
Tintom

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von scientific » 21.04.2017 01:33:11

Stichwort "REST"

Welcher Provider?

Bzw. schau dir die Unterschiede im Quelltext der Mails an.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von seep » 21.04.2017 07:29:57

Tintom hat geschrieben:Wenn ich das über die Webmaske meines Emailproviders einrichte bekommt der Empfänger automatisch einen Kalendereintrag geschickt. Versuche ich es manuell indem ich eine Email mit angehängter .ics-Datei verschicke, kommt beim Empfänger auch nur eine Email mit angehängter Datei an.

Was macht der Mailprovider anders als ich?
Das ist leicht: Er schickt einen Kalendereintrag, du einen .ics-Anhang. :wink:

Definiere: "das ... einrichte" und "Kalendereintrag". Und wo wird denn überhaupt was eingetragen? Ich verstehe die Frage nicht.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von scientific » 21.04.2017 08:31:05

Du musst eine multipart Nachricht mit eingebundenem Anhang erzeugen, nicht einfach ein Attachment anhängen.
Noch dazu muss die ics-Datei bestimmte Felder enthalten damit Thunderbird/Lightning oder auch Outlook das sofort als neuen Termin wahrnimmt und darauf entsprechend reagieren kann.

Mit python kannst du sowas einfach machen. Ob das auch mit mailx auf der Shell geht, weiß ich jetzt gar nicht.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von Meillo » 21.04.2017 08:49:39

scientific hat geschrieben: Bzw. schau dir die Unterschiede im Quelltext der Mails an.
Das ist der richtige Ansatz!

scientific hat geschrieben: Mit python kannst du sowas einfach machen. Ob das auch mit mailx auf der Shell geht, weiß ich jetzt gar nicht.
Man kann auch /usr/sbin/sendmail direkt mit manuell erstelltem Mailquellcode fuettern.
Use ed once in a while!

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von Tintom » 21.04.2017 14:58:10

Danke an euch alle für den Input. Ich hab gedacht, die Arbeit hat sich schon jemand vorher gemacht, aber scheinbar bin ich der erste. :roll:

scientific hat geschrieben: Bzw. schau dir die Unterschiede im Quelltext der Mails an.
Danke, das hat mich weitergebracht! Auf den Punkt gebracht ist es wohl nur eine kleine Sache:

Code: Alles auswählen

#Email mit Kalenderanhang
<snip>
--refeiks-6bdfd3df-a490-44f1-a14c-3640955142cf
Content-Type: text/html; charset=UTF-8


--refeiks-6bdfd3df-a490-44f1-a14c-3640955142cf
Content-Type: text/calendar
Content-Disposition: attachment; filename=kalendereintrag.ics
Content-Transfer-Encoding: base64
</snip>

Code: Alles auswählen

#Kalendereintrag des Mailproviders
<snip>
------=_Part_294764878_630339259.1492724529919
Content-Type: text/calendar; charset=UTF-8; method=REQUEST
Content-Transfer-Encoding: 7bit

BEGIN:VCALENDAR
<...>
END:VCALENDAR

------=_Part_294764878_630339259.1492724529919--
------=_Part_294764879_1791553789.1492724529919
Content-Type: application/ics; charset=UTF-8; method=REQUEST; name=Einladung.ics
Content-Disposition: attachment; filename=Einladung.ics
Content-Transfer-Encoding: 7bit
Content-Class: urn:content-classes:calendarmessage
</snip>
Die Zeilen von BEGIN:VCALENDAR bis END:VCALENDAR sind der Inhalt der Datei Einladung.ics, die als Anhang mitgesendet wird. Somit ist wohl der entscheidende Unterschied die Zeile Content-Type.
Damit kann ich weiter basteln. :)

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von scientific » 21.04.2017 17:30:35

So is es.
Aber du wirst so ein inline-Attachment nicht so ohne weiters hinbringen... Ich habs schon probiert... Daher bin ich auf python gekommen...
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von Tintom » 21.04.2017 18:15:25

scientific hat geschrieben:So is es.
Aber du wirst so ein inline-Attachment nicht so ohne weiters hinbringen... Ich habs schon probiert... Daher bin ich auf python gekommen...
Ich hätte jetzt als nächstes Content-Type und die Kalenderdaten in eine Datei geschrieben und dann ein sendmail < DATEI darauf losgelassen.
Das kann ich mir dann wohl sparen ?!

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von scientific » 21.04.2017 18:38:50

Probiers. Vielleicht hab ichs ja auch nicht richtig gemacht...
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Termineinladungen auf Kommandozeile verschicken

Beitrag von Tintom » 22.04.2017 13:01:05

Nach einigem hin und her ist mein Stand folgender:

Ich versende die Mail mit

Code: Alles auswählen

mail.mailutils --append="Content-Type: multipart/alternative; boundary="inline01"" -F sender@example.org -s "BETREFF" receipient@example.org <DATEI
DATEI:

Code: Alles auswählen

--inline01
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit

Lorem ipsum ....

--inline01
Content-Type: text/calendar; charset="utf-8"; method=REQUEST
Content-Transfer-Encoding: 7bit

BEGIN:VCALENDAR
METHOD:REQUEST
VERSION:2.0
PRODID:12345
BEGIN:VEVENT
ORGANIZER;CN=Absender Name:MAILTO:sender@example.org
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Absender Name:MAILTO:sender@example.org
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Empfänger Name:MAILTO:receipient@example.org
DESCRIPTION:Blablabla.\n\n
SUMMARY:Einladung
DTSTART;TZID=Europe-London:20170527T140000
DTEND;TZID=Europe-London:20170527T150000
UID:20170523abcdefghijlmnopqrrrrefuuk
DTSTAMP:20170422T090258Z
LOCATION:City
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
--inline01--
Mein Mailprovider empfängt die Mail und fragt mich sofort, ob ich den Termin in meinem Kalender eintragen will.

Sehr wertvoll war RFC 5545. Wichtig ist, dass UID (Unique ID) für jeden Termin einen einzigartigen String enthält. Auch scheint wohl PRODID wichtig zu sein, denn ohne ging es nicht

Positiv überrascht hat mich, dass Microsoft Outlook sehr saubere Kalendereinträge generiert. Ohne Outlook wäre ich keinen Schritt weiter gekommen und hätte wohl frustriert aufgegeben.
Wer die Kalendereinträge nicht in Klartext übertragen möchte, kann den Termin auch mit base64 codieren (macht Outlook standardmäßig).
Dazu muss das Inline-Statement noch angepasst werden. Der obige Kalendereintrag sieht dann so aus:

Code: Alles auswählen

Content-Type: text/calendar; charset="utf-8"; method=REQUEST
Content-Transfer-Encoding: base64

QkVHSU46VkNBTEVOREFSCk1FVEhPRDpSRVFVRVNUClZFUlNJT046Mi4wClBST0RJRDoxMjM0NQpC
RUdJTjpWRVZFTlQKT1JHQU5JWkVSO0NOPUFic2VuZGVyIE5hbWU6TUFJTFRPOnNlbmRlckBleGFt
cGxlLm9yZwpBVFRFTkRFRTtST0xFPVJFUS1QQVJUSUNJUEFOVDtQQVJUU1RBVD1ORUVEUy1BQ1RJ
T047UlNWUD1UUlVFO0NOPUFic2VuZGVyIE5hbWU6TUFJTFRPOnNlbmRlckBleGFtcGxlLm9yZwpB
VFRFTkRFRTtST0xFPVJFUS1QQVJUSUNJUEFOVDtQQVJUU1RBVD1ORUVEUy1BQ1RJT047UlNWUD1U
UlVFO0NOPUVtcGbDpG5nZXIgTmFtZTpNQUlMVE86cmVjZWlwaWVudEBleGFtcGxlLm9yZwpERVND
UklQVElPTjpCbGFibGFibGEuXG5cbgpTVU1NQVJZOkVpbmxhZHVuZwpEVFNUQVJUO1RaSUQ9RXVy
b3BlLUxvbmRvbjoyMDE3MDUyN1QxNDAwMDAKRFRFTkQ7VFpJRD1FdXJvcGUtTG9uZG9uOjIwMTcw
NTI3VDE1MDAwMApVSUQ6MjAxNzA1MjNhYmNkZWZnaGlqbG1ub3BxcnJycmVmdXVrCkRUU1RBTVA6
MjAxNzA0MjJUMDkwMjU4WgpMT0NBVElPTjpDaXR5CkJFR0lOOlZBTEFSTQpBQ1RJT046RElTUExB
WQpERVNDUklQVElPTjpSRU1JTkRFUgpUUklHR0VSO1JFTEFURUQ9U1RBUlQ6LVBUMTVNCkVORDpW
QUxBUk0KRU5EOlZFVkVOVApFTkQ6VkNBTEVOREFSCg==
--inline01--

Antworten