Outlook-Termine aus Django heraus verschicken

Django, Flask, Bottle, WSGI, CGI…
Antworten
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Hi,

ich möchte Outlook-Termine direkt aus dem Djangobackend verschicken.

Über django.core.mail kann ich relativ leicht Mails verschicken, indem ich mich mit unserem Exchange-Server verbinde, aber ich finde nichts für Termine.

Hat da jemand eine Idee?

LG
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Ein Outlook-Termin ist nichts anderes als eine Email mit einem Kalendereintrag als Attachement.
Ein bisschen Suchen liefert z.B. dieses Beispiel:
https://www.baryudin.com/blog/entry/sen ... ts-python/
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Danke dir. Sieht ein bisschen nach Frickelei aus. Mal schauen, wie ich da durch komme.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Also die Mail wird verschickt und es beinhaltet auch ein Meeting, welches man zum Kalender hinzufügen kann, jedoch sieht das anders aus, als wenn ich ein Meeting direkt aus outlook verschicke.

Es wird eher eine Datei verschickt, die heißt:
not supported calendar message.isc

Code: Alles auswählen

import icalendar

from email.encoders import encode_base64
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart

import smtplib
import datetime as dt
import pytz


tz = pytz.timezone("Europe/Berlin")
start = tz.localize(dt.datetime.combine(dt.date(2021,7,10), dt.time(10,15)))
end = tz.localize(dt.datetime.combine(dt.date(2021,7,10), dt.time(11,15)))
timestamp = tz.localize(dt.datetime.combine(dt.date(2021,7,10), dt.time(0,10)))
# Build the event itself
cal = icalendar.Calendar()
cal.add('prodid', 'HalloHalloHallo')
cal.add('version', '2.0')
cal.add('method', "REQUEST")
event = icalendar.Event()
event.add('attendee', 'empfaenger@outlook.de')
event.add('organizer', 'absender@outlook.de')
event.add('status', "confirmed")
event.add('category', "Event")
event.add('summary', 'Ein kleiner Test.')
event.add('description', 'Hier steht ein sehr langer Text, der alles genau beschreibt')
event.add('location', 'Berlin')
event.add('dtstart', start)
event.add('dtend', end)
event.add('dtstamp', timestamp)
event.add('priority', 5)
event.add('sequence', 1)
event.add('created', tz.localize(dt.datetime.now()))

# Add a reminder
alarm = icalendar.Alarm()
alarm.add("action", "DISPLAY")
alarm.add('description', "Reminder")
# The only way to convince Outlook to do it correctly
alarm.add("TRIGGER;RELATED=START", "-PT{0}H".format(1))
event.add_component(alarm)
cal.add_component(event)



# Build the email message and attach the event to it
msg = MIMEMultipart("alternative")

msg["Subject"] = 'Ich bin die Ueberschrift'
msg["From"] = 'absender@outlook.de'
msg["To"] = 'empfaenger@outlook.de'
msg["Content-class"] = "urn:content-classes:calendarmessage"

msg.attach(MIMEText('Herzlich Willkommen! Das ist der Emailtext.') )

filename = "invite.ics"
part = MIMEBase('text', "calendar", method="REQUEST", name=filename)
part.set_payload( cal.to_ical() )
encode_base64(part)
part.add_header('Content-Description', filename)
part.add_header("Content-class", "urn:content-classes:calendarmessage")
part.add_header("Filename", filename)
part.add_header("Path", filename)
msg.attach(part)

# Send the email out

mailServer = smtplib.SMTP('smtp-mail.outlook.com', 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login('absender@outlook.de', 'xxxx')
mailServer.sendmail(msg["From"], [msg["To"]], msg.as_string())
mailServer.close()
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten