Seite 1 von 1

Outlook-Termine aus Django heraus verschicken

Verfasst: Mittwoch 30. Juni 2021, 18:46
von naheliegend
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

Re: Outlook-Termine aus Django heraus verschicken

Verfasst: Mittwoch 30. Juni 2021, 19:30
von Sirius3
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/

Re: Outlook-Termine aus Django heraus verschicken

Verfasst: Mittwoch 30. Juni 2021, 20:51
von naheliegend
Danke dir. Sieht ein bisschen nach Frickelei aus. Mal schauen, wie ich da durch komme.

Re: Outlook-Termine aus Django heraus verschicken

Verfasst: Samstag 3. Juli 2021, 07:48
von naheliegend
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()