Dies ist der Artikel zum 24. Tag von Django Adventskalender 2019. Ich schrieb einen Artikel mit Stolz darauf, an Heiligabend an Django zu denken. Lol
Ich bin noch ein Anfänger, aber ich habe Django studiert und irgendwann steckte ich stundenlang fest (ein wenig neuer Weg, um stecken zu bleiben?). Selbst wenn die Referenz auf Englisch war, gab es keinen Artikel, der genau richtig war, also beschloss ich, diesen Artikel mit dem Gefühl zu schreiben, dass "ich nicht möchte, dass andere Leute hier stolpern".
Zunächst werde ich das schnellste Verfahren für die Zustellung von E-Mails mit Django-ses und Amazon-SES vorstellen, um die Leserschaft zu erweitern (. ・ _ ・.). Als nächstes möchte ich das gepackte Teil vorstellen, das das Hauptthema dieser Zeit ist!
Wie der Titel schon sagt, ist dies ein Artikel für "Personen, die E-Mails mit ** django-ses ** und ** Amazon SES ** (Amazon Simple Email Service) zustellen möchten".
Diesmal: "Wenn Sie sendmail mit Amazon SES und Django-SES senden können, erreichen Sie Ihr Ziel! Ich werde sagen.
Die ausgefüllte Form des Programms (die Ameise, die die Einstellungen mit der KEY-Einstellung von Amazon SES ändern muss) ist in GitHub hier aufgeführt.
Zunächst werde ich die Dateien vom Typ Docker ablegen. Erstellen Sie die folgende Datei im Verzeichnis docker-ses-sample.
dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
docker-compose.yml
version: "3"
services:
django-ses-sample:
build: .
volumes:
- .:/code
ports:
- "8000:8000"
command: python manage.py runserver 0.0.0.0:8000
Dies ist eine Liste der Pakete, die als nächstes installiert werden sollen.
requirements.txt
Django==2.2.9
boto3==1.10.44
django-ses==0.8.13
↓ Aktuelles Verzeichnis wie dieses ↓
Arbeitsverzeichnis
django-ses-sample
├ dockerfile
├ docker-compose.yml
└ requirements.txt
Von hier bis zum Startprojekt sofort. Öffnen Sie zunächst die CLI, in der Sie mit dem Docker spielen können. (Ich benutze die Ubuntu 18.04 LTS CLI)
Wechseln Sie dann in Ihr Arbeitsverzeichnis.
CLI, die Docker spielen kann
~/$ cd django-ses-sample
~/django-ses-sample$ docker-compose run --rm django-ses-sample django-admin startproject config .
Dies macht es einfach, da Sie beim Erstellen zum Startprojekt gehen können. Und wenn eine solche Anzeige kommt, ist sie erfolgreich.
CLI, die Docker spielen kann
Successfully tagged djangosessample_django-ses-sample:latest
Und wenn Sie das Startprojekt unter django-ses-sample sehen können, fahren wir fort!
Als nächstes spielen wir mit settings.py in der von startproject erstellten Konfiguration. In settings.py befindet sich eine Spalte mit dem Namen INSTALLED_APPS. Fügen Sie hier also django_ses hinzu.
settings.py
:
INSTALLED_APPS = [
:
'django_ses', #Hinzugefügt
]
Scrollen Sie dann nach unten und fügen Sie das folgende neue Programm hinzu.
settings.py
:
# AWS settings
AWS_ACCESS_KEY_ID = 'AKI***********' #Zugriffsschlüssel-ID
AWS_SECRET_ACCESS_KEY = '****************************' #Geheimer Zugangsschlüssel
# Email settings
EMAIL_BACKEND = 'django_ses.SESBackend' #Dies ist obligatorisch
DEFAULT_FROM_EMAIL = SERVER_EMAIL = '**** <****@******>' #Benutzername und E-Mail-Adresse des Absenders(Beispiel:'Asuka<[email protected]>')
Sie müssen die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel wie folgt festlegen. Dies wird in AWS im nächsten Kapitel erstellt, sodass Sie es vorerst leer lassen können. Darüber hinaus wird die Postzustellung durch EMAIL_BACKEND festgelegt. Ich erkläre, hier Django-SES zu verwenden. Die letzte Zeile enthält die Informationen des Absenders.
Das Programm wurde zu diesem Zeitpunkt auf GitHub hier platziert.
Bereiten Sie zunächst ein AWS-Konto vor.
Geben Sie nach der Anmeldung SES (Simple Email Service) in den Dienst ein und springen Sie zu dieser Seite.
Wenn Sie hier wahrscheinlich die Standardregion auf Tokio festgelegt haben, werden Sie aufgefordert, eine Region auszuwählen. Wählen Sie daher unbedingt ** Eastern US (Northern Virginia): us-east-1 *. ( Ich stecke hier fest. [Springe den Artikel runter](# Ich gehe auf das Hauptthema dieses Artikels ein))
E-Mail-Adressen werden in der linken Spalte angezeigt. Wählen Sie sie daher aus.
Wählen Sie [Neue Mail ein Kleid ändern] und registrieren Sie eine E-Mail-Adresse für Forderungen.
Bitte registrieren Sie hier eine andere Forderungs-E-Mail-Adresse unter [Neue Mail ein Kleid ändern].
Als Nächstes wird eine E-Mail von AWS an die in 5 und 6 registrierte E-Mail-Adresse gesendet. Greifen Sie daher auf diese URL zu und authentifizieren Sie Ihre E-Mail-Adresse.
Damit ist der Vorgang abgeschlossen
Um AmazonSES verwenden zu können, müssen Sie die zuvor eingeführte Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel generieren.
Geben Sie abschließend die Zugangsschlüssel-ID und den geheimen Zugangsschlüssel in config / settings.py ein! !!
Die Bestätigungsmethode war das Ziel dieser Zeit: "Wenn Sie mit Amazon SES und Django-SES_mail senden können, erreichen Sie das Ziel! ], Also wird send_mail verwendet, also importiere es mit der Python-Shell und führe es aus.
CLI
~/django-ses-sample$ docker-compose run --rm django-ses-sample python3 manage.py shell
>>> from django.core.mail import send_mail
>>> title = 'Das ist Asuka Saito.'
>>> content = 'Ist das morgige Weihnachten nicht kostenlos?'
>>> host_email = 'E-Mail-Adresse bei SES registriert ①' #Beispiel:[email protected]
>>> rece_email = ['E-Mail-Adresse bei SES registriert ②'] #Beispiel:['[email protected]']
>>> send_mail(title,content,host_email,rece_email)
Sie sollten jetzt eine E-Mail erhalten (weinen)
Bitte sehen Sie es sich als Randnotiz an. Lol
Ich werde dir sagen, wo ich zuerst gestolpert bin!
Du wirst es benutzen wollen, wenn es offiziell veröffentlicht ist ... lol
Wenn ich jedoch die Umgebung mit Django 3.0 erstelle, wird dieser Fehler in Bezug auf die Dateien von boto oder django-ses angezeigt.
CLI
ImportError: cannot import name 'python_2_unicode_compatible' from 'django.utils.encoding
Es scheint, dass Django 3.0 aufgrund der Abschaffung der Python 2-Kompatibilitäts-API Fehler auslöste. * 2 Django Official Documentation * 3 GitHub-Probleme
Anscheinend scheint es geheilt zu sein, wenn ich mit der Datei herumspiele, aber die Datei wurde nicht in der Datenbank im Docker-Container (ursprünglich mit PostgreSQL entwickelt) gefunden, und bei Verwendung der Django 2.2-Serie wird kein Fehler mehr ausgegeben.
Die Information, die ich hier und da sehe: "Die Reaktion ist in der Region, die näher an meinem Gebiet liegt, schneller", hat meinen Körper bewegt ...
Ich habe hier verschiedene Dokumente nach dem Problem durchsucht, aber keines davon schien zu passen. Also habe ich beschlossen, diesmal zu schreiben.
Es ist jedoch wahrscheinlich, dass Experten darauf hinweisen, daher werde ich hier zuerst schreiben.
Durch Festlegen von AWS_SES_REGION_NAME und AWS_SES_REGION_ENDPOINT können andere Regionen als "Eastern United States (Northern Virginia)" (us-east-1) festgelegt werden.
In "Western United States (Oregon)" (us-west-2) können Sie beispielsweise nach der Authentifizierung Ihrer E-Mail-Adresse bei Amazon SES eine E-Mail senden, indem Sie dies in settings.py schreiben.
settings.py
AWS_ACCESS_KEY_ID = 'AKI***********' #Zugriffsschlüssel-ID
AWS_SECRET_ACCESS_KEY = '**************************' #Geheimer Zugangsschlüssel
AWS_SES_REGION_NAME = 'us-west-2' #Hinzugefügt
AWS_SES_REGION_ENDPOINT = 'email.us-west-2.amazonaws.com' #Hinzugefügt
aber! !! !! ** Mit "Asia Pacific (Mumbai)" (ap-south-1) können Sie keine E-Mail senden, auch wenn Sie dies so einstellen! !! ** ** **
settings.py
AWS_ACCESS_KEY_ID = 'AKI***********' #Zugriffsschlüssel-ID
AWS_SECRET_ACCESS_KEY = '**************************' #Geheimer Zugangsschlüssel
AWS_SES_REGION_NAME = 'ap-south-1' #Hinzugefügt
AWS_SES_REGION_ENDPOINT = 'email.ap-south-1.amazonaws.com' #Hinzugefügt
Mein Fazit ist, dass AWS einige Services hat, die nicht für jede Region implementiert sind, daher hat ** Asia Pacific (Oregon) diesen Service noch nicht implementiert **. Ich vermute, das ist es nicht.
Tatsächlich scheint Oregon kürzlich zum SES-Dienst hinzugefügt worden zu sein, und ich denke, "ich denke, es wird wahrscheinlich in zukünftigen Updates verfügbar sein" (/ ・ ω ・) /
Vielen Dank für das Lesen bis zum Ende. Wenn Sie das diesmal erstellte Programm um das allauth-Paket usw. erweitern, können Sie eine Solid-Mail-Funktion implementieren. Nutzen Sie daher das schnellste Verfahren. Wenn Sie Fehler oder Eindrücke haben, können Sie diese gerne kommentieren! !!
Ich wäre Ihnen dankbar, wenn Sie meinem Twitter folgen könnten, das Backends wie Django, AWS und Docker studiert und sich auch beim maschinellen Lernen bemüht! !
Recommended Posts