Haben Sie jemals Probleme mit der Einrichtung einer E -Mail -Integration in Ihre Django -Projekte gekämpft? Unabhängig davon, ob es sich
In diesem Tutorial werden wir mithilfe von Django mit praktischen, Schritt-für-Schritt-Anweisungen E-Mails senden. Wir werden behandelt, wie Sie Django SMTP -Verbindungen konfigurieren, ein Passwort für Ihren E -Mail -Anbieter einrichten und wie Sie E -Mails über die Django -Shell senden. Wir werden uns auch ansehen, wie Sie ein Kontaktformular für Ihre Django -App einrichten, mit der Ihre Kunden Sie kontaktieren können.Key Takeaways
Wenn Sie jedoch die Kosten und die Bemühungen der Verwendung eines dedizierten E -Mail -Dienstes vergleichen, kann das Senden von E -Mails mit Ihrer persönlichen E -Mail für kleine oder Testprojekte angemessener sein. Wir werden diesen Ansatz hier verfolgen, um die Dinge einfach zu halten.
Hinweis
: Es ist keine gute Idee, Ihren persönlichen E -Mail -Service für Ihre Produktionswebsite zu verwenden. Sie können mehr über Google Mail -Senden von Beschränkungen erfahren oder sich auf die Einschränkungen Ihres E -Mail -Anbieters beziehen. Hinweis: Der vollständige Code für dieses Tutorial ist auf GitHub verfügbar.
SMTP (oder das einfache Mail -Transfer -Protokoll) ist eine Reihe von Regeln, um festzustellen, wie E -Mails von Absendern an Empfänger übertragen werden. SMTP -Server verwenden dieses Protokoll, um ausgehende E -Mails zu senden und weiterzugeben. (Beachten Sie, dass andere Protokolle bestimmen, wie E -Mails
Hinweis: Wenn Sie mit virtuellen Umgebungen nicht vertraut sind, überprüfen Sie unsere Python Virtual Environments Guide .
konfigurieren Das E -Mail -Backend ist der Mechanismus, um E -Mails mit Django zu senden. Standardmäßig verwendet Django django.core.mail.backends.smtp.emailbackend, sodass eine Verbindung zu einem SMTP -Server hergestellt und E -Mails gesendet werden können. Abhängig von der Umgebung (Entwicklung oder Produktion) können Sie ein anderes E -Mail -Backend für Ihren Anforderungen auswählen. Sie müssen die Einstellungsdatei vor dem Senden von E -Mails ändern. Suchen wir diese Datei also mit dem folgenden Befehl:
Der Baumbefehl gibt die Dateistruktur eines Verzeichnisses aus. In diesem Fall erhalten wir, da wir ihm keinen bestimmten Verzeichnispfad geben, etwas Ähnliches wie das Folgende, wenn wir uns im Stammordner des Projekts befinden: Die Datei, die wir ständig durch dieses Tutorial ändern, sind die Einstellungen.Py im Ordner E -MailProject. Es enthält die gesamte Projektkonfiguration, die Sie benötigen, und können benutzerdefinierte Variablen festlegen. Wie die Django-Dokumente sagen: „Eine Einstellungsdatei ist nur ein Python-Modul mit Variablen auf Modulebene“. Schauen wir uns die Einstellungen an, die für das Senden einer E -Mail mit Django erforderlich sind. Öffnen Sie die Datei von EmailProject/Settings.py und fügen Sie die folgenden Einstellungen unten in der Datei ein: Lassen Sie uns den obigen Code aufschlüsseln, indem Sie jede dieser Einstellungen analysieren. Die Einstellung von Email_backend deklariert das Backend In unserem Django -Projekt wird eine Verbindung zum SMTP -Server hergestellt. Diese Variable zeigt auf die SMTP.Emailbackend -Klasse, die alle Parameter empfängt, die zum Senden einer E -Mail erforderlich sind. Ich empfehle dringend, dass Sie sich den Klassenkonstruktor direkt im Django -Quellcode ansehen. Sie werden überrascht sein, wie lesbar dieser Code ist. Hinweis: Obwohl diese Klasse der Standard -E -Mail -Backend ist, gilt es als gute Praxis, in den Django -Einstellungen explizit zu sein. Alle anderen E -Mail -Einstellungen basieren auf dem Konstruktor dieser E -Mail -Backend -Klasse. Die Einstellung von Email_host bezieht sich auf die SMTP -Serverdomäne, die Sie verwenden. Dies hängt von Ihrem E -Mail -Anbieter ab. Im Folgenden finden Sie eine Tabelle mit dem SMTP -Server -Host, der drei gemeinsamen Anbietern entspricht: lassen wir diese Einstellung vorerst leer, da wir später eine .EnV-Datei verwenden, um hartcodierte sensible Schlüssel oder Konfigurationen pro Standort zu vermeiden. Sie sollten niemals Anmeldeinformationen direkt in den Code einstellen. Wir werden Django Environ verwenden, um dieses Problem zu lösen. Die Einstellung von Email_port muss auf 587 festgelegt werden, da es sich um den Standardport für die meisten SMTP -Server handelt. Dies gilt für persönliche E -Mail -Anbieter. Dieser Port wird zusammen mit der TLS -Verschlüsselung verwendet, um die Sicherheit des E -Mail -Sendens zu gewährleisten. Transport Layer Security (TLS) ist ein Sicherheitsprotokoll, das im Internet verwendet wird, um die Kommunikation zwischen Web -Apps (DJango) und Servern (SMTP -Server) zu verschlüsseln. Ursprünglich haben wir die Variable E -Mail_USE_TLS auf true gesetzt. Dies bedeutet, dass Django die Transport Layer Security verwendet, um eine Verbindung zum SMTP -Server herzustellen und E -Mails zu senden. (Für persönliche E -Mail -Anbieter ist es obligatorisch.) Die Einstellung von E -Mail_host_user ist Ihre persönliche E -Mail -Adresse. Lassen Sie es vorerst leer, da wir Django-Eniron verwenden, um all diese Anmeldeinformationen einzurichten. Die Einstellung von E -Mail_host_password ist das App -Kennwort, das Sie aus Ihrem E -Mail -Konto erhalten - der Vorgang, den wir direkt nach diesem Abschnitt durchführen. Gleiche Geschichte: Lassen Sie diese Einstellung leer, da wir später Umgebungsvariablen verwenden. Für andere Anbieter können Sie die Einstellungen entsprechend anpassen. Zum Beispiel: Outlook -Konfiguration: Yahoo -Konfiguration: Da "weniger sichere Apps" von Google veraltet sind, besteht die ordnungsgemäße und sichere Möglichkeit, eine Verbindung zum Google Mail -Konto für das Senden von E -Mails herzustellen, die Verwendung von App -Passwörtern. App-Passwörter sind nur verfügbar, wenn Sie eine 2-Schritt-Überprüfung für Ihr Google-Konto aktivieren. Auch wenn Sie nur E -Mails in der Entwicklung senden, sollten Sie keine Passwörter direkt in den Quellcode schreiben. Dies wird noch wichtiger, wenn ein Versionskontrollsystem zusammen mit GitHub verwendet wird, um Ihr Projekt zu hosten. Sie möchten nicht, dass Personen auf Ihre Daten zugreifen. Lassen Sie uns sehen, wie wir dies verhindern können, indem wir Django-Eniron verwenden. Erstellen einer .Env -Datei im Verzeichnis von EmailProject (wobei die Datei Einstellungen.Py -Datei befindet) mit dem folgenden Befehl: Öffnen Sie nun diese .Env -Datei und geben Sie die folgenden Schlüssel -Wert -Paare ein: den Inhalt dieser Datei aufschlüsseln: Um diese Umgebungsvariablen zu nutzen, müssen wir Django-Eniron installieren: Hinweis: Stellen Sie sicher, dass Ihre virtuelle Umgebung aktiviert ist. Öffnen Sie nun die Einstellungen.
verfügbar sind
Vergessen Sie nicht, die .Env -Datei in Ihr .gitignore aufzunehmen, wenn Sie Git und GitHub verwenden. Sie können dies einfach tun, indem Sie es öffnen und die folgende Zeile hinzufügen:
Öffnen Sie ein Terminal, aktivieren Sie die virtuelle Umgebung und führen Sie:
Lassen Sie uns den obigen Code aufschlüsseln: Beachten Sie, wie wir das Einstellungsobjekt verwenden, um die von _email (die E -Mail -Adresse, mit denen Sie E -Mails zu senden) und die Empfecent.List (die benutzerdefinierte Einstellung von recicent_address, die wir im .Env definiert haben).
Das Django -Formmodul bietet uns alle erforderlichen Klassen und Felder, um unser Kontaktformular zu erstellen. Noch einmal importieren wir das Einstellungsobjekt und die Funktion "send_mail", um die E -Mails zu senden. Unser Kontaktformular enthält mehrere Felder und verwendet zwei benutzerdefinierte Methoden: get_info (), die die von den Benutzer bereitgestellten Informationen formatieren und die E-Mail-Nachricht senden. Sehen wir uns in Code implementiert: Diese Klasse ist riesig, also lass uns aufschlüsseln, was wir in jedem Teil tun. Erstens definieren wir vier Felder, die zum Senden der E -Mail -Nachricht erforderlich sind: Auf dem Weg zu den benutzerdefinierten Methoden verwenden wir nur die Get_info -Methode, um die Informationen des Benutzers zu formatieren und zwei Variablen zurückzugeben: Betreff, das nichts anderes als das Feld Anfrage ist, und die Nachricht, die die tatsächliche E -Mail -Nachricht ist, die von Django gesendet wird . Andererseits erhält die Send () -Methode nur die formatierten Informationen von get_info und sendet die Nachricht mit der Funktion "send_mail". Obwohl dieser Abschnitt ziemlich groß war, werden Sie sehen, wie wir die Kontaktansichten vereinfacht haben, indem wir die gesamte Sendelogik an die ContactForm selbst implementieren. Öffnen Sie die Datei contact/Views.py und fügen Sie die folgenden Importe hinzu: Wie Sie sehen, werden wir Django generische Ansichten verwenden, was uns bei einfachen Aufgaben eine Menge Zeit spart - beispielsweise beim Einrichten eines Formulars mit Formview oder beim Erstellen einer Ansicht, die nur eine Vorlage mit einer Vorlage rendert TemplateView. Importieren wir auch die im vorherigen Abschnitt erstellte Kontaktform und die Funktion Reverse_lazy, die bei der Arbeit mit klassenbasierten Ansichten verwendet wird. Setzen Sie die Ansichten fort, die ContactView:
Beende in diesem Abschnitt werden wir eine contactSucessView schreiben, die dem Benutzer eine Erfolgsnachricht anzeigt. Da wir die TemplateView -Klasse bereits importiert haben, müssen wir nur daraus erben und das Attribut template_name definieren: Sie können die Ansichten.Py -Datei im GitHub -Repository überprüfen, wenn Sie Bedenken haben. Es ist Zeit, die URL -Muster der Kontakt -App zu erstellen. Da Django uns die URLS.Py -Datei standardmäßig nicht gibt, müssen wir sie mit dem folgenden Befehl erstellen (stellen Sie sicher, dass Sie sich im Ordner der Kontakt -App befinden): Öffnen Sie diese Datei und richten Sie die Variablen app_name und urlpatterns ein: Wir verwenden Pfad, um die Route und ihre korrespondentierte Ansicht zur URL -Konfiguration der App einzuschließen. Wenn wir die Variable app_name auf "Kontakt" festlegen, bedeutet dies, dass die URL Namespacing der App so aussieht: Hinweis: Ein Namespace ist das, was wir in Django -Vorlagen und -ansichten dynamisch nennen. Sie können mehr über den Django -URL -Dispatcher in der offiziellen Dokumentation erfahren. Django -Vorlagen sind die bevorzugte Methode, um Daten dynamisch anzuzeigen, indem sie HTML und spezielle Tags, die von der Django -Vorlagesprache bereitgestellt werden, verwendet werden. Für diese spezielle App werden wir drei Vorlagen verwenden: Beginnen wir zunächst die App -Vorlagenstruktur des Kontakts (stellen Sie sicher, dass Sie sich im Ordner der Kontakt -App befinden): Die obigen Befehle erstellen die typische Vorlagenstruktur einer wiederverwendbaren Django -App - AppName/Vorlagen/Appname - und die zuvor erwähnten Baumvorlagendateien. So sollte die App -Dateistruktur jetzt aussehen: Lassen Sie uns in den Inhalt der Base.html -Vorlage:
erneut, Crispy_Forms ist eine Django -App, und wir müssen sie in die Liste installed_apps aufnehmen: Wir verwenden das Vorlagenpaket von Bootstrap 4, da die Startstrap -Formklassen zwischen der 4. und 5. Version kompatibel sind (zum Zeitpunkt des Schreibens). Arbeiten wir nun an der Ankontakt.html -Vorlage: Beachten Sie, wie wir die Basisvorlage erweitert haben und den Block -Platzhalter verwenden. Dies macht die Sprache der Django -Vorlagen so effizient, da wir viel HTML -Kopieren und -besten sparen können. Wenn wir über das Formular sprechen, verwenden wir die Methode „Post“, was bedeutet, dass unser ContactView die vom Benutzer angegebenen Daten verarbeitet und die E -Mail senden, wenn das Formular gültig ist. Der { % csrf_token %} ist aus Sicherheitsgründen in jeder Form obligatorisch. Die Dokumentation von Django hat eine dedizierte Seite zu CSRF -Token und die Gründe, sie bei der Arbeit mit Formularen zu verwenden. Wir werden das Formular mit dem knusprigen Template -Tag rendern, weshalb wir die knusprigen Tags mit { % lad crispy_forms_tags %}.
einpacken
Es gibt viele Möglichkeiten, E -Mails mit Django zu senden. In diesem Tutorial haben Sie es mit Ihrer persönlichen E -Mail -Adresse geschafft, aber ich möchte, dass Sie andere Tools erkunden und in Ihre Projekte integrieren. In diesem Tutorial haben wir Folgendes behandelt: Weitere Informationen zu Django finden Sie in „Erstellen Sie eine Foto-Sharing-App mit Django“.
Verwenden Sie für fortgeschrittenere Tests Tools wie Mailhog oder MailTrap, die als gefälschte SMTP -Server zum Erfassen und Anzeigen von Test -E -Mails fungieren. Verwenden Sie Django Environ, um sensible Anmeldeinformationen (wie E -Mail -Host, Benutzername und Passwort) aus einer .Env -Datei zu laden: Verständnis des SMTP -Servers und des einfachen E -Mail -Transfer -Protokolls
Erstellen eines Django -Projekts python <span>-m venv .venv</span>
<span># CMD
</span>.venv<span>\Scripts\activate
</span>
<span># Power Shell
</span>.venv<span>\Scripts\Activate.ps1
</span>
<span># WSL
</span><span>source .venv/bin/activate</span>
pip <span>install django</span>
django-admin startproject EmailProject
<span>cd EmailProject
</span>python manage.py runserver
Django -E -Mail -Backend für SMTP python <span>-m venv .venv</span>
<span># CMD
</span>.venv<span>\Scripts\activate
</span>
<span># Power Shell
</span>.venv<span>\Scripts\Activate.ps1
</span>
<span># WSL
</span><span>source .venv/bin/activate</span>
pip <span>install django</span>
E -Mail -Backend
E -Mail -Host
E -Mail -Port
E -Mail Verwenden Sie TLS
E -Mail -Host -Benutzer
E -Mail -Host -Passwort
python <span>-m venv .venv</span>
<span># CMD
</span>.venv<span>\Scripts\activate
</span>
<span># Power Shell
</span>.venv<span>\Scripts\Activate.ps1
</span>
<span># WSL
</span><span>source .venv/bin/activate</span>
Einrichten von Google Mail SMTP -Server mit App -Kennwort
Warum Appkennwörter verwenden?
Schritt 1: 2-Schritt-Überprüfung
aktivieren
Schritt 2: Generieren Sie ein App -Passwort
Dann gibt es ein Pop-up-Modal mit einem 16-Charakter-App-Passwort. Stellen Sie sicher, dass Sie es irgendwo speichern, da es nur einmal angezeigt wird.
Wenn Sie andere E -Mail -Anbieter verwenden, lesen Sie die folgenden Anleitungen:
Verwenden von Django Environ, um E -Mail -Backend -Anmeldeinformationen zu sichern
python <span>-m venv .venv</span>
<span># CMD
</span>.venv<span>\Scripts\activate
</span>
<span># Power Shell
</span>.venv<span>\Scripts\Activate.ps1
</span>
<span># WSL
</span><span>source .venv/bin/activate</span>
pip <span>install django</span>
django-admin startproject EmailProject
<span>cd EmailProject
</span>python manage.py runserver
Endlich kommen wir zum saftigen Teil des Artikels! Es ist Zeit, Ihre erste E -Mail an Django zu senden.
tree
├── EmailProject
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
1 directory, 6 files
python <span>-m venv .venv</span>
asynchrones E -Mail -Senden <span># CMD
</span>.venv<span>\Scripts\activate
</span>
<span># Power Shell
</span>.venv<span>\Scripts\Activate.ps1
</span>
<span># WSL
</span><span>source .venv/bin/activate</span>
2. Erstellen Sie ein automatisiertes Kontaktformular mit Django pip <span>install django</span>
django-admin startproject EmailProject
<span>cd EmailProject
</span>python manage.py runserver
Kontaktformular tree
python <span>-m venv .venv</span>
<span># CMD
</span>.venv<span>\Scripts\activate
</span>
<span># Power Shell
</span>.venv<span>\Scripts\Activate.ps1
</span>
<span># WSL
</span><span>source .venv/bin/activate</span>
Kontaktansichten
pip <span>install django</span>
django-admin startproject EmailProject
python <span>-m venv .venv</span>
<span># CMD
</span>.venv<span>\Scripts\activate
</span>
<span># Power Shell
</span>.venv<span>\Scripts\Activate.ps1
</span>
<span># WSL
</span><span>source .venv/bin/activate</span>
Wenden Sie URLs
an
pip <span>install django</span>
django-admin startproject EmailProject
<span>cd EmailProject
</span>python manage.py runserver
Schreibvorlagen
tree
├── EmailProject
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
1 directory, 6 files
<span># EmailProject/settings.py
</span>
<span># Bottom of the file
</span>EMAIL_BACKEND <span>= 'django.core.mail.backends.smtp.EmailBackend'
</span>EMAIL_HOST <span>= ''
</span>EMAIL_PORT <span>= 587
</span>EMAIL_USE_TLS <span>= True
</span>EMAIL_HOST_USER <span>= ''
</span>EMAIL_HOST_PASSWORD <span>= ''
</span>
EMAIL_HOST <span>= 'smtp-mail.outlook.com'
</span>EMAIL_PORT <span>= 587
</span>EMAIL_USE_TLS <span>= True
</span>EMAIL_HOST_USER <span>= 'your-email@outlook.com'
</span>EMAIL_HOST_PASSWORD <span>= 'your-app-password'</span>
EMAIL_HOST <span>= 'smtp.mail.yahoo.com'
</span>EMAIL_PORT <span>= 587
</span>EMAIL_USE_TLS <span>= True
</span>EMAIL_HOST_USER <span>= 'your-email@yahoo.com'
</span>EMAIL_HOST_PASSWORD <span>= 'your-app-password'</span>
python <span>-m venv .venv</span>
<span># CMD
</span>.venv<span>\Scripts\activate
</span>
<span># Power Shell
</span>.venv<span>\Scripts\Activate.ps1
</span>
<span># WSL
</span><span>source .venv/bin/activate</span>
pip <span>install django</span>
Best Practices, um zu folgen
1. Wiederverwendbare E -Mail -Sendungsfunktion django-admin startproject EmailProject
2. Einheitstest <span>cd EmailProject
</span>python manage.py runserver
3. Senden reichhaltiger HTML -E -Mails tree
4. Integration von E-Mail-Diensten von Drittanbietern ├── EmailProject
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
1 directory, 6 files
5. E -Mail -Überprüfung in Benutzerregistrierung <span># EmailProject/settings.py
</span>
<span># Bottom of the file
</span>EMAIL_BACKEND <span>= 'django.core.mail.backends.smtp.EmailBackend'
</span>EMAIL_HOST <span>= ''
</span>EMAIL_PORT <span>= 587
</span>EMAIL_USE_TLS <span>= True
</span>EMAIL_HOST_USER <span>= ''
</span>EMAIL_HOST_PASSWORD <span>= ''
</span>
FAQs auf Django E -Mail mit SMTP -Server
senden
Kann ich eine E -Mail von Django senden?
Wie sende ich E -Mails in Django?
Wie sende ich Outlook Mail in Django?
Wie kann man E -Mails in Django erhalten?
Wie teste ich E -Mails, um Django zu senden, ohne echte E -Mails zu senden? python <span>-m venv .venv</span>
Wie verwalte ich sensible E -Mail -Anmeldeinformationen sicher?
Das obige ist der detaillierte Inhalt vonSo senden Sie E -Mail mit Django mit SMTP -Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!