test send_mail reply example email_host python django email smtp

python - send_mail - email_host django



¿Cómo enviar un correo electrónico a través de Django? (11)

En mi settings.py , tengo lo siguiente:

EMAIL_BACKEND = ''django.core.mail.backends.smtp.EmailBackend'' # Host for sending e-mail. EMAIL_HOST = ''localhost'' # Port for sending e-mail. EMAIL_PORT = 1025 # Optional SMTP authentication information for EMAIL_HOST. EMAIL_HOST_USER = '''' EMAIL_HOST_PASSWORD = '''' EMAIL_USE_TLS = False

Mi código de correo electrónico:

from django.core.mail import EmailMessage email = EmailMessage(''Hello'', ''World'', to=[''[email protected]'']) email.send()

Por supuesto, si configuro un servidor de depuración a través de python -m smtpd -n -c DebuggingServer localhost:1025 , puedo ver el correo electrónico en mi terminal.

Sin embargo, ¿cómo puedo realmente enviar el correo electrónico no al servidor de depuración sino a [email protected]?

Después de leer sus respuestas, déjenme aclarar algo:

  1. ¿No puedes usar localhost (simple ubuntu pc) para enviar correos electrónicos?

  2. Pensé en django 1.3 send_mail() está algo obsoleto y se EmailMessage.send() su lugar?


  1. Crear un proyecto: django-admin.py startproject gmail
  2. Edite settings.py con el siguiente código:

    EMAIL_USE_TLS = True EMAIL_HOST = ''smtp.gmail.com'' EMAIL_HOST_USER = ''[email protected]'' EMAIL_HOST_PASSWORD = ''yourpassword'' EMAIL_PORT = 587

  3. Ejecute el modo interactivo: python manage.py shell

  4. Importar el módulo EmailMessage:

    from django.core.mail import EmailMessage

  5. Envía el correo electrónico

    email = EmailMessage(''Subject'', ''Body'', to=[''[email protected]'']) email.send()


En realidad, ya había hecho esto desde Django hace un tiempo. Abra una cuenta legítima de GMail e ingrese las credenciales aquí. Aquí está mi código:

from email import Encoders from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart def sendmail(to, subject, text, attach=[], mtype=''html''): ok = True gmail_user = settings.EMAIL_HOST_USER gmail_pwd = settings.EMAIL_HOST_PASSWORD msg = MIMEMultipart(''alternative'') msg[''From''] = gmail_user msg[''To''] = to msg[''Cc''] = ''[email protected]'' msg[''Subject''] = subject msg.attach(MIMEText(text, mtype)) for a in attach: part = MIMEBase(''application'', ''octet-stream'') part.set_payload(open(attach, ''rb'').read()) Encoders.encode_base64(part) part.add_header(''Content-Disposition'',''attachment; filename="%s"'' % os.path.basename(a)) msg.attach(part) try: mailServer = smtplib.SMTP("smtp.gmail.com", 687) mailServer.ehlo() mailServer.starttls() mailServer.ehlo() mailServer.login(gmail_user, gmail_pwd) mailServer.sendmail(gmail_user, [to,msg[''Cc'']], msg.as_string()) mailServer.close() except: ok = False return ok


Encontré usar SendGrid para ser la forma más fácil de configurar el envío de correo electrónico con Django. Así es como funciona:

  1. Crea una cuenta SendGrid (y verifica tu correo electrónico)
  2. Agregue lo siguiente a su settings.py : EMAIL_HOST = ''smtp.sendgrid.net'' EMAIL_HOST_USER = ''<your sendgrid username>'' EMAIL_HOST_PASSWORD = ''<your sendgrid password>'' EMAIL_PORT = 587 EMAIL_USE_TLS = True

¡Y estás listo!

Para enviar un correo electrónico:

from django.core.mail import send_mail send_mail(''<Your subject>'', ''<Your message>'', ''[email protected]'', [''[email protected]''])

Si desea que Django le envíe un correo electrónico cada vez que haya un error interno de 500 servidores, agregue lo siguiente a su settings.py :

DEFAULT_FROM_EMAIL = ''[email protected]'' ADMINS = [(''<Your name>'', ''[email protected]'')]

Enviar correos electrónicos con SendGrid es gratis hasta 12k correos electrónicos por mes.


Envíe el correo electrónico a un servidor SMTP real. Si no desea configurar el suyo, puede encontrar empresas que lo hagan, como Google.


Mi sitio está alojado en Godaddy y tengo un correo electrónico privado registrado en el mismo. Estas son las configuraciones que funcionaron para mí:

En settings.py:

EMAIL_HOST = ''mail.domain.com'' EMAIL_HOST_USER = ''[email protected]'' EMAIL_HOST_PASSWORD = ''abcdef'' DEFAULT_FROM_EMAIL = ''[email protected]'' SERVER_EMAIL = ''[email protected]'' EMAIL_PORT = 25 EMAIL_USE_TLS = False

En shell:

from django.core.mail import EmailMessage email = EmailMessage(''Subject'', ''Body'', to=[''[email protected]'']) email.send()

Luego obtuve "1" como O / P, es decir, éxito. Y recibí el correo también. :)


Necesita usar smtp como back-end en settings.py

EMAIL_BACKEND = ''django.core.mail.backends.smtp.EmailBackend''

Si usa backend como consola, recibirá resultados en la consola

EMAIL_BACKEND = ''django.core.mail.backends.console.EmailBackend''

Y también debajo de ajustes además

EMAIL_USE_TLS = True EMAIL_HOST = ''smtp.gmail.com'' EMAIL_PORT = 587 EMAIL_HOST_USER = ''[email protected]'' EMAIL_HOST_PASSWORD = ''password''

Si está utilizando gmail para esto, configure la verificación en dos pasos y la contraseña específica de la aplicación y copie y pegue esa contraseña en el valor EMAIL_HOST_PASSWORD anterior.


Para SendGrid - Django específicamente:

SendGrid Django Docs aquí

Establezca estas variables en

settings.py

EMAIL_HOST = ''smtp.sendgrid.net'' EMAIL_HOST_USER = ''sendgrid_username'' EMAIL_HOST_PASSWORD = ''sendgrid_password'' EMAIL_PORT = 587 EMAIL_USE_TLS = True

en views.py

from django.core.mail import send_mail send_mail(''Subject here'', ''Here is the message.'', ''[email protected]'', [''[email protected]''], fail_silently=False)


Para la versión 1.7 de Django, si las soluciones anteriores no funcionan, intente lo siguiente

en settings.py add

#For email EMAIL_BACKEND = ''django.core.mail.backends.smtp.EmailBackend'' EMAIL_USE_TLS = True EMAIL_HOST = ''smtp.gmail.com'' EMAIL_HOST_USER = ''[email protected]'' #Must generate specific password for your app in [gmail settings][1] EMAIL_HOST_PASSWORD = ''app_specific_password'' EMAIL_PORT = 587 #This did the trick DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

La última línea hizo el truco para django 1.7


Puede usar "Probar herramienta de servidor de correo" para probar el envío de correo electrónico en su máquina o servidor local. Google y descargue la "Herramienta de servidor de correo de prueba" y configúrelo.

Luego en su settings.py:

EMAIL_BACKEND= ''django.core.mail.backends.smtp.EmailBackend'' EMAIL_HOST = ''localhost'' EMAIL_PORT = 25

De shell:

from django.core.mail import send_mail send_mail(''subject'',''message'',''sender email'',[''receipient email''], fail_silently=False)


Tarde, pero:

Además de la corrección DEFAULT_FROM_EMAIL otros han mencionado y que permite que las aplicaciones menos seguras accedan a la cuenta, tuve que acceder a https://accounts.google.com/DisplayUnlockCaptcha mientras estaba registrado como la cuenta en cuestión para que Django finalmente autenticar.

Fui a esa URL a través de un túnel SSH al servidor web para asegurarme de que la dirección IP fuera la misma; No estoy totalmente seguro si eso es necesario, pero no puede doler. Puede hacerlo de la siguiente manera: ssh -D 8080 -fN <username>@<host> , luego configure su navegador web para usar localhost:8080 como proxy SOCKS.


Yo uso Gmail como mi servidor SMTP para Django. Mucho más fácil que lidiar con postfix o cualquier otro servidor. No estoy en el negocio de administrar servidores de correo electrónico.

En settings.py:

EMAIL_USE_TLS = True EMAIL_HOST = ''smtp.gmail.com'' EMAIL_PORT = 587 EMAIL_HOST_USER = ''[email protected]'' EMAIL_HOST_PASSWORD = ''password''

NOTA : En 2016, Gmail ya no permite esto por defecto. Puede usar un servicio externo como Sendgrid, o puede seguir este tutorial de Google para reducir la seguridad, pero permita esta opción: https://support.google.com/accounts/answer/6010255