---
title: "django-o365: Ein modernes Mailbackend für Django und Exchange Online"
description: "Entstanden aus realen Projektanforderungen, richtet sich das Paket an Teams, die Microsoft 365 einsetzen und ihren E-Mail-Versand sicher, wartbar und ohne Workarounds umsetzen möchten. Dieser Artikel gibt einen Überblick über Motivation, Funktionsumfang und Einsatz."
canonical_url: "https://www.blueshoe.de/blog/django-o365-ein-modernes-mailbackend-fur-django-und-exchange-online/"
---

*django-o365* ist ein Open-Source Mailbackend für Django, das den Versand von E-Mails über Exchange Online mit OAuth 2.0 ermöglicht. Entstanden aus realen Projektanforderungen, richtet sich das Paket an Teams, die Microsoft 365 einsetzen und ihren E-Mail-Versand sicher, wartbar und ohne Workarounds umsetzen möchten. Dieser Artikel gibt einen Überblick über Motivation, Funktionsumfang und Einsatz.

![django-o365 Mailbackend für Django und Exchange Online](/img/blog/django-mailing-o365.png)

## Moderne E-Mail-Authentifizierung für Django-Anwendungen

E-Mails sind ein zentraler Bestandteil vieler Webanwendungen – und genau deshalb besonders kritisch, wenn sie nicht zuverlässig funktionieren. Viele Unternehmen setzen dabei auf Microsoft 365 und Exchange Online, während klassische SMTP-Authentifizierung zunehmend eingeschränkt oder ganz abgeschaltet wird. OAuth 2.0 ist inzwischen der empfohlene Standard.

Mit [django-o365](https://github.com/Blueshoe/django-o365) haben wir ein Mailbackend für [Django](/technologien/python-django-agentur/) entwickelt, das den Versand von E-Mails über Exchange Online mit OAuth-2.0-Authentifizierung ermöglicht und sich nahtlos in den bestehenden Django-Mail-Workflow integriert. In diesem Beitrag zeigen wir, auf welchen Bausteinen es aufsetzt und wie du es in deinem eigenen Projekt einsetzen kannst.

## Ausgangslage: Mailversand mit django-exchange

In einem Bestandsprojekt eines unserer Kunden wurde der Mailversand bisher mit einem lokalen Postfach via Microsoft Exchange realisiert. Zu diesem Zweck haben wir damals das Paket [django-exchange](https://github.com/Blueshoe/django-exchange) entwickelt. Das Postfach wurde nun zu Exchange Online mit OAuth 2.0 Authentifizierung migriert. Da es für Django noch kein geeignetes Paket gab, haben wir django-o365 entwickelt. Unsere größte Motivation dafür war eine saubere Django-Integration, sodass wir in unserem Projekt lediglich das Email-Backend austauschen müssen.

## Technisches Fundament: python-o365

Als technisches Fundament setzt django-o365 auf das etablierte Python-Paket [python-o365](https://github.com/O365/python-o365). Dieses stellt eine vollständige Abstraktion der Microsoft-Graph-API bereit und übernimmt unter anderem die Authentifizierung via OAuth 2.0 sowie den eigentlichen Versand der E-Mails über Exchange Online.

django-o365 nutzt python-o365 gezielt als Transport-Schicht, kapselt dessen Funktionalität jedoch vollständig hinter dem bekannten Django-Mail-Interface. So profitieren wir von einer stabilen und aktiv gepflegten Basis, ohne diese direkt im Anwendungscode verwenden zu müssen.

Auf eine eigene Implementierung der Microsoft-Graph-API haben wir bewusst verzichtet: python-o365 deckt den benötigten Funktionsumfang bereits zuverlässig ab und erlaubt es uns, den Fokus auf eine saubere Django-Integration, Wartbarkeit und einfache Nutzung zu legen.

## Architektur & Funktionsweise

django-o365 ist bewusst schlank aufgebaut und folgt dem Prinzip, sich nahtlos in bestehende Django-Strukturen einzufügen. Kern des Pakets ist ein eigenes Django-Mailbackend, das die standardisierte Django-Mail-API implementiert. Sobald Django eine E-Mail versendet, übernimmt django-o365 die Übergabe an python-o365, welches wiederum den Versand über die Microsoft Graph API abwickelt.

Die Authentifizierung erfolgt vollständig über OAuth 2.0. Access- und Refresh-Tokens werden dabei von python-o365 verwaltet und erneuert, ohne dass der Anwendungscode davon etwas mitbekommt. django-o365 fungiert somit als Bindeglied zwischen Django und Exchange Online: Es übersetzt Djangos Mailversand in Graph-API-Aufrufe, ohne zusätzliche Logik in der Anwendung zu erzwingen.

Diese klare Trennung hat zwei Vorteile: Zum einen bleibt der Django-Code unverändert und unabhängig von Microsoft-spezifischen Details, zum anderen können wir auf eine bewährte Bibliothek für die komplexe OAuth- und API-Logik zurückgreifen.

## Verwendung in Django

Da django-o365 aktuell noch nicht auf PyPI veröffentlicht ist, wird es direkt aus dem Git-Repository eingebunden, z.B. über die requirements.txt. Weitere Abhängigkeiten, insbesondere python-o365, werden automatisch mitinstalliert.

Auf Microsoft-Seite ist eine App-Registrierung in Microsoft Entra ID (ehemals Azure AD) erforderlich. Dort wird eine Anwendung angelegt, die die Berechtigung zum Versand von E-Mails über Microsoft Graph erhält (z.B. `Mail.Send`). Für die OAuth-Authentifizierung werden eine Client-ID, ein Client-Secret sowie der Tenant benötigt. Zusätzlich muss festgelegt werden, ob der Versand über ein Benutzerkonto oder ein Shared Mailbox Postfach erfolgen soll.

In Django beschränkt sich die Konfiguration auf die Settings. Dort wird lediglich das Mailbackend auf django-o365 umgestellt und die benötigten Zugangsdaten hinterlegt:

```python
EMAIL_O365_TENANT_ID = 'my-tenant-id'
EMAIL_O365_CLIENT_ID = 'my-client-id'
EMAIL_O365_CLIENT_SECRET = 'my-super-secret'
EMAIL_O365_SENDER = 'mysender@example.com'

# set backend
EMAIL_BACKEND = 'django_o365.backend.O365EmailBackend'
```

Am eigentlichen Anwendungscode muss nichts geändert werden. Bestehende Aufrufe von `send_mail`, `EmailMessage` oder `EmailMultiAlternatives` funktionieren weiterhin unverändert. Der Wechsel auf Exchange Online mit OAuth 2.0 erfolgt ausschließlich über Konfiguration – genau das war eines der zentralen Ziele bei der Entwicklung von django-o365.

## Open Source & Ausblick

Wir bei Blueshoe sind überzeugt vom Open Source Ansatz. Somit ist django-o365 selbstverständlich als Open-Source-Projekt konzipiert und wird offen auf GitHub entwickelt. Der aktuelle Fokus liegt bewusst auf einem klaren, stabilen Kern: dem zuverlässigen Mailversand über Exchange Online mit OAuth-2.0-Authentifizierung im Credentials-Workflow. Der Versand von E-Mails inklusive Anhängen wird bereits vollständig unterstützt und deckt damit die gängigen Anwendungsfälle in Webprojekten ab.

Für die Zukunft sind weitere Authentifizierungs-Workflows denkbar, etwa stärker benutzerbezogene Szenarien. Der Anspruch bleibt dabei derselbe: eine saubere Django-Integration ohne unnötige Komplexität im Anwendungscode. Feedback, Anregungen und Beiträge aus der Community sind ausdrücklich willkommen – sie helfen dabei, das Paket gezielt weiterzuentwickeln und praxisnah zu halten.

## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
