Ceci est l'article du 24ème jour du Calendrier de l'Avent Django 2019. J'ai écrit un article avec fierté en pensant à Django la veille de Noël. Lol
Je suis encore un débutant, mais j'étudiais Django et à un moment donné, je suis resté coincé pendant des heures (une petite nouvelle façon de rester coincé?). Même si la référence était en anglais, il n'y avait pas d'article qui était juste, j'ai donc décidé d'écrire cet article avec le sentiment que "je ne veux pas que les autres trébuchent ici".
Tout d'abord, je vais vous présenter la procédure la plus rapide pour envoyer du courrier en utilisant Django-ses et Amazon-SES pour élargir le lectorat (. ・ _ ・.) Ensuite, je voudrais vous présenter la partie emballée qui est le sujet principal de cette fois!
Comme le titre l'indique, cet article est destiné aux «personnes qui souhaitent envoyer des e-mails en utilisant ** django-ses ** et ** Amazon SES ** (Amazon Simple Email Service)».
Cette fois, "Si vous pouvez send_mail en utilisant Amazon SES et Django-SES, vous atteindrez votre objectif! Je dirais.
Le formulaire rempli du programme (la fourmi qui doit ajuster les paramètres avec le paramètre KEY d'Amazon SES) est répertorié dans GitHub here.
Tout d'abord, je vais mettre les fichiers de type Docker. Créez le fichier suivant dans le répertoire 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
Voici une liste de packages à installer ensuite.
requirements.txt
Django==2.2.9
boto3==1.10.44
django-ses==0.8.13
↓ Répertoire actuel comme celui-ci ↓
Directeur de travail
django-ses-sample
├ dockerfile
├ docker-compose.yml
└ requirements.txt
D'ici au projet de départ à la fois. Tout d'abord, ouvrez la CLI où vous pouvez jouer avec le docker. (J'utilise la CLI Ubuntu 18.04 LTS)
Accédez ensuite à votre répertoire de travail.
CLI que le docker peut jouer
~/$ cd django-ses-sample
~/django-ses-sample$ docker-compose run --rm django-ses-sample django-admin startproject config .
Cela facilite les choses car vous pouvez accéder au projet de démarrage pendant la construction. Et quand un tel affichage arrive, c'est réussi.
CLI que le docker peut jouer
Successfully tagged djangosessample_django-ses-sample:latest
Et si vous pouvez voir le projet de démarrage sous django-ses-sample, passons à autre chose!
Ensuite, nous jouerons avec settings.py dans la configuration créée par startproject. Il y a une colonne appelée INSTALLED_APPS dans settings.py, alors ajoutez django_ses ici.
settings.py
:
INSTALLED_APPS = [
:
'django_ses', #Ajoutée
]
Puis faites défiler vers le bas et ajoutez le nouveau programme suivant.
settings.py
:
# AWS settings
AWS_ACCESS_KEY_ID = 'AKI***********' #ID de la clé d'accès
AWS_SECRET_ACCESS_KEY = '****************************' #Clé d'accès secrète
# Email settings
EMAIL_BACKEND = 'django_ses.SESBackend' #C'est obligatoire
DEFAULT_FROM_EMAIL = SERVER_EMAIL = '**** <****@******>' #Nom d'utilisateur et adresse e-mail de l'expéditeur(Exemple:'Asuka<[email protected]>')
Vous devez définir l'ID de la clé d'accès et la clé d'accès secrète comme ceci. Cela sera créé dans AWS dans le chapitre suivant, vous pouvez donc le laisser vide pour le moment. En outre, la distribution des e-mails est définie par EMAIL_BACKEND. Je déclare utiliser Django-SES ici. La dernière ligne contient les informations de l'expéditeur.
Le programme à ce stade a été placé sur GitHub here.
Commencez par préparer un compte AWS.
Après vous être connecté, entrez SES (Simple Email Service) dans le service et accédez à cette page.
Si vous avez probablement défini ici la région standard de Tokyo, vous serez invité à sélectionner une région, assurez-vous donc de sélectionner ** Est des États-Unis (Virginie du Nord): us-east-1 *. ( Je suis coincé ici. [Aller en bas de l'article](# Je vais entrer dans le sujet principal de cet article))
Les adresses e-mail apparaîtront dans la colonne de gauche, alors sélectionnez-la.
Sélectionnez [Varify a New mail a dress] et enregistrez une adresse e-mail recevable.
Ici, veuillez enregistrer une autre adresse e-mail recevable avec [Varify a New mail a dress].
Ensuite, un e-mail sera envoyé d'AWS à l'adresse e-mail enregistrée en 5 et 6, veuillez donc accéder à cette URL et authentifier votre adresse e-mail.
Ceci termine
Pour utiliser AmazonSES, vous devez générer l'ID de clé d'accès et la clé d'accès secrète introduits précédemment.
Enfin, entrez l'ID de la clé d'accès et la clé d'accès secrète dans config / settings.py! !!
La méthode de confirmation était le but de cette fois, "Si vous pouvez send_mail en utilisant Amazon SES et Django-SES, vous atteindrez l'objectif! ], Donc send_mail est utilisé, alors importez-le avec le shell python et exécutez-le.
CLI
~/django-ses-sample$ docker-compose run --rm django-ses-sample python3 manage.py shell
>>> from django.core.mail import send_mail
>>> title = 'C'est Asuka Saito.'
>>> content = 'Le Noël de demain n'est-il pas gratuit?'
>>> host_email = 'Adresse e-mail enregistrée auprès de SES ①' #Exemple:[email protected]
>>> rece_email = ['Adresse e-mail enregistrée auprès de SES ②'] #Exemple:['[email protected]']
>>> send_mail(title,content,host_email,rece_email)
Vous devriez maintenant recevoir un e-mail (pleurer)
S'il vous plaît, jetez-y un coup d'oeil comme note latérale. Lol
Je vais vous dire où j'ai trébuché en premier!
Vous voudrez l'utiliser quand il sera officiellement publié ... lol
Cependant, lorsque je construis l'environnement avec Django 3.0, j'obtiens cette erreur liée aux fichiers de boto ou django-ses.
CLI
ImportError: cannot import name 'python_2_unicode_compatible' from 'django.utils.encoding
Il semble que Django 3.0 a commencé à générer des erreurs en raison de l'abolition de l'API de compatibilité Python 2. * 2 Documentation Officielle Django * 3 problèmes GitHub
Apparemment, il semble guéri si je joue avec le fichier, mais le fichier n'a pas été trouvé dans la base de données du conteneur Docker (développé à l'origine avec PostgreSQL), et en utilisant la série Django 2.2, je ne lance plus d'erreur.
J'ai été frappé par les informations que j'ai vues ici et là, "Une région plus proche de ma région a une réponse plus rapide" ...
J'ai cherché dans divers documents le problème ici, mais aucun d'entre eux ne semblait convenir. J'ai donc décidé d'écrire cette fois.
Cependant, il est probable que les experts le soulignent, donc je vais d'abord écrire ici.
En définissant AWS_SES_REGION_NAME et AWS_SES_REGION_ENDPOINT, il est possible de définir des régions autres que "Est des États-Unis (Virginie du Nord)" (us-east-1).
Par exemple, dans "Ouest des États-Unis (Oregon)" (us-west-2), après avoir authentifié votre adresse e-mail auprès d'Amazon SES, vous pouvez envoyer un e-mail en écrivant ceci dans settings.py.
settings.py
AWS_ACCESS_KEY_ID = 'AKI***********' #ID de la clé d'accès
AWS_SECRET_ACCESS_KEY = '**************************' #Clé d'accès secrète
AWS_SES_REGION_NAME = 'us-west-2' #Ajoutée
AWS_SES_REGION_ENDPOINT = 'email.us-west-2.amazonaws.com' #Ajoutée
mais! !! !! ** Avec "Asia Pacific (Mumbai)" (ap-south-1), vous ne pouvez pas envoyer d'e-mail même si vous le définissez comme ceci! !! ** **
settings.py
AWS_ACCESS_KEY_ID = 'AKI***********' #ID de la clé d'accès
AWS_SECRET_ACCESS_KEY = '**************************' #Clé d'accès secrète
AWS_SES_REGION_NAME = 'ap-south-1' #Ajoutée
AWS_SES_REGION_ENDPOINT = 'email.ap-south-1.amazonaws.com' #Ajoutée
Ma conclusion est qu'AWS propose certains services qui ne sont pas mis en œuvre pour chaque région, donc ** l'Asie-Pacifique (Oregon) n'a pas encore implémenté ce service **. Je suppose que non.
En fait, il semble que l'Oregon a été ajouté au service SES récemment, et je pense que "je pense qu'il sera probablement disponible dans les futures mises à jour" (/ ・ ω ・) /
Merci d'avoir lu jusqu'au bout. Si vous ajoutez le package allauth etc. au programme créé cette fois-ci, vous serez en mesure d'implémenter une fonction de courrier électronique solide, veuillez donc profiter de la procédure la plus rapide. Si vous avez des erreurs ou des impressions, n'hésitez pas à commenter! !!
Je vous serais reconnaissant de bien vouloir suivre mon Twitter, qui étudie les backends tels que Django, AWS et Docker, et fait également des efforts en matière d'apprentissage automatique! !
Recommended Posts