3 votes

OSError : [Errno 99] Address not available - envoi d'un e-mail depuis une application docker django avec gmail smtp

J'essaie d'envoyer un e-mail depuis mon application django dans docker et j'obtiens l'erreur suivante :

OSError at /accounts/mail/
[Errno 99] Address not available
Request Method: GET
Request URL:    https://localhost:8000/accounts/mail/
Django Version: 2.2.5
Exception Type: OSError
Exception Value:    
[Errno 99] Address not available

Journal du serveur Web :

web\_1            | OSError: \[Errno 99\] Address not available
web\_1            | \[17/Sep/2019 19:21:35\] **"GET /accounts/mail/ HTTP/1.1" 500 108369**

Mon environnement : Ubuntu 18.04 Docker Django + Gunicorn Postfix

Je n'ai aucun problème pour envoyer un e-mail en dehors de Docker, en local. Je suppose qu'il pourrait y avoir un problème avec le port smtp à l'intérieur de docker, mais je ne sais pas comment le résoudre. J'ai essayé avec postfix - même erreur.

Voir le code de django :

from django.core.mail import EmailMessage  # didn't work also with send_mail

def email(request):
    mail_subject = 'Activate your account'
    message = 'test'
    to_email = 'mail@mail'
    email = EmailMessage(
        mail_subject, message, to=[to_email]
    )
    email.send()
    return redirect('index')

Une partie de mon fichier docker-compose.

version: '3.3'

services:
  web:
    build: ./app
    command: python manage.py runsslserver 0.0.0.0:8000
...
    ports:
      - 8000:8000
      - 587:587
      - 25:25
    env_file: .envdev
...
  postfix:
    image: juanluisbaptiste/postfix:latest
    expose:
    - "25"
    env_file:
      - .envpostfix
    restart: always
    volumes:
     - "/etc/localtime:/etc/localtime:ro"
...

Fichier .env de Docker :

EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_USE_TLS=True
EMAIL_HOST=smtp.gmail.com
EMAIL_HOST_USER=***
EMAIL_HOST_PASSWORD=***
EMAIL_PORT=587

Mes paramètres postfix :

SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=***
SMTP_PASSWORD=***
SERVER_HOSTNAME=127.0.0.1

1voto

Problème résolu.

J'ai créé des variables MAIL dans les paramètres de django au lieu de les conserver uniquement dans le fichier .env de docker.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X