[PYTHON] Django-Eine Geschichte, die beim Versuch, E-Mails mit SES und Amazon SES zu betreiben, hängen blieb (Einführung des schnellsten Verfahrens)

Einführung

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".

Struktur dieses Artikels

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!

Zielgruppe

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".

Entwicklungsumgebung

Bestätigen Sie dieses Ziel

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.

Erstellen Sie ein Programm

Docker-Dateien

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!

Django-Dateien

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.

Gehen Sie zu AWS für verschiedene Einstellungen

Registrierungsverfahren für Amazon SES

  1. Bereiten Sie zunächst ein AWS-Konto vor.

  2. Geben Sie nach der Anmeldung SES (Simple Email Service) in den Dienst ein und springen Sie zu dieser Seite.

  3. 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))

  4. E-Mail-Adressen werden in der linken Spalte angezeigt. Wählen Sie sie daher aus.

  5. Wählen Sie [Neue Mail ein Kleid ändern] und registrieren Sie eine E-Mail-Adresse für Forderungen.

  6. Bitte registrieren Sie hier eine andere Forderungs-E-Mail-Adresse unter [Neue Mail ein Kleid ändern].

  7. 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.

  8. Damit ist der Vorgang abgeschlossen

IAM-Registrierung

Um AmazonSES verwenden zu können, müssen Sie die zuvor eingeführte Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel generieren.

  1. Suchen Sie die IAM-Seite im Dienst und fliegen Sie
  2. Wählen Sie in der linken Spalte einen Benutzer aus
  3. Wählen Sie Benutzer hinzufügen
  4. Geben Sie den Benutzernamen nach Ihren Wünschen ein
  5. Überprüfen Sie den programmgesteuerten Zugriff
  6. Wählen Sie unten Nächster Schritt
  7. Wählen Sie Vorhandene Richtlinie direkt anhängen
  8. Suchen Sie nach SES und wählen Sie Amazon SES Full Access
  9. Danach gehen Sie bitte durch und erstellen Sie einen Benutzer
  10. Sie können csv herunterladen, wenn Sie es erstellen, also laden Sie es herunter
  11. Überprüfen Sie die Zugangsschlüssel-ID und den geheimen Zugangsschlüssel mit csv
  12. Damit ist der Vorgang abgeschlossen

Geben Sie abschließend die Zugangsschlüssel-ID und den geheimen Zugangsschlüssel in config / settings.py ein! !!

Überprüfen Sie, ob SES mit Django funktioniert

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)

Kommen wir zum Hauptthema dieses Artikels! !! !! (Verstopfte Geschichte)

Bitte sehen Sie es sich als Randnotiz an. Lol

Ich werde dir sagen, wo ich zuerst gestolpert bin!

  1. ** Erstellen einer Umgebung mit Django 3.0 **
  2. ** Region auf Mumbai im asiatisch-pazifischen Raum einstellen **

① Informationen zum Erstellen einer Umgebung mit Django 3.0

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.

② Informationen zum Einstellen der Region auf Mumbai im asiatisch-pazifischen Raum

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.

Es war unmöglich, die Einstellungen in settings.py zu 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

Also, was war denn falsch? ??

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" (/ ・ ω ・) /

schließlich

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! !@ heacet43

Verweise

Recommended Posts

Django-Eine Geschichte, die beim Versuch, E-Mails mit SES und Amazon SES zu betreiben, hängen blieb (Einführung des schnellsten Verfahrens)
Eine Geschichte, die beim Versuch, die Python-Version mit GCE zu aktualisieren, hängen blieb
Eine Geschichte, die fehlgeschlagen ist, als versucht wurde, das Suffix mit rstrip aus einem String zu entfernen
Probleme und Lösungen, die beim Versuch aufgetreten sind, rbenv mit dem Git-Submodul (auch pyenv) zu setzen
Eine Geschichte, die vorbereitet werden musste, wenn versucht wurde, ein Django-Tutorial mit einfachen Centos7 zu erstellen
Ich blieb stecken, als ich versuchte, einen relativen Pfad mit relative_to () in Python anzugeben
Eine Geschichte über den Versuch, mit der kostenlosen Stufe von AWS zur COVID-19-Analyse beizutragen, und das Scheitern
Beim Schreiben in eine CSV-Datei mit Python habe ich einen kleinen Fehler gemacht und den Liefertermin nicht eingehalten