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

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=['user@gmail.com']) 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 envío el correo electrónico no al servidor de depuración sino a user@gmail.com?

Después de leer tus respuestas, déjame aclarar algo:

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

  2. Pensé que en django 1.3 send_mail() está un tanto en desuso y, en su EmailMessage.send() se usa EmailMessage.send() .

Envía el correo electrónico a un servidor SMTP real. Si no desea configurar el suyo propio, puede encontrar empresas que ejecuten uno para usted, como Google.

Utilizo Gmail como mi servidor SMTP para Django. Mucho más fácil que tratar 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 = 'me@gmail.com' EMAIL_HOST_PASSWORD = 'password' 

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

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

     EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'youremail@gmail.com' EMAIL_HOST_PASSWORD = 'email_password' EMAIL_PORT = 587 
  3. Ejecuta el modo interactivo: python manage.py shell

  4. Importe el módulo EmailMessage:

     from django.core.mail import EmailMessage 
  5. Enviar el correo electrónico:

     email = EmailMessage('Subject', 'Body', to=['your@email.com']) email.send() 

Para obtener más información, consulte las send_mail y EmailMessage en los documentos .

ACTUALIZACIÓN para Gmail

Además, si tiene problemas para enviar correos electrónicos a través de gmail, recuerde revisar estas guías de google.

En la configuración de su cuenta de Google, vaya a Security > Account permissions > Access for less secure apps y habilite esta opción.

También crea una contraseña específica de la aplicación para tu gmail después de que hayas activado la verificación en dos pasos .

Entonces deberías usar la contraseña específica de la aplicación en la configuración. Así que cambia la siguiente línea:

  EMAIL_HOST_PASSWORD = 'your_email_app_specific_password' 

Además, si está interesado en enviar un correo electrónico HTML, compruebe esto .

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

en settings.py agregar

 #For email EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'sender@gmail.com' #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

Mi sitio está alojado en GoDaddy y tengo un correo electrónico privado registrado en el mismo. Estos son los ajustes que funcionaron para mí:

En settings.py:

 EMAIL_HOST = 'mail.domain.com' EMAIL_HOST_USER = 'abc@domain.com' EMAIL_HOST_PASSWORD = 'abcdef' DEFAULT_FROM_EMAIL = 'abc@domain.com' SERVER_EMAIL = 'abc@domain.com' EMAIL_PORT = 25 EMAIL_USE_TLS = False 

En shell:

 from django.core.mail import EmailMessage email = EmailMessage('Subject', 'Body', to=['def@domain.com']) email.send() 

Luego obtuve “1” como O / P, es decir, Éxito. Y recibí el correo también. 🙂

Necesitas usar smtp como backend en settings.py

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

Si usa backend como consola, recibirá salida en la consola.

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

Y también debajo de la configuración, además

 EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_HOST_USER = 'urusername@gmail.com' EMAIL_HOST_PASSWORD = 'password' 

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

De hecho, había hecho esto desde Django hace un tiempo. Abra una cuenta de GMail legítima 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'] = 'you@gmail.com' 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 

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

  1. Cree una cuenta de SendGrid (y verifique su correo electrónico)
  2. Agregue lo siguiente a su settings.py : EMAIL_HOST = 'smtp.sendgrid.net' EMAIL_HOST_USER = '' EMAIL_HOST_PASSWORD = '' EMAIL_PORT = 587 EMAIL_USE_TLS = True

¡Y ya está todo listo!

Para enviar un correo electrónico:

 from django.core.mail import send_mail send_mail('', '', 'from@example.com', ['to@example.com']) 

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

 DEFAULT_FROM_EMAIL = 'your.email@example.com' ADMINS = [('', 'your.email@example.com')] 

El envío de correo electrónico con SendGrid es gratis hasta 12k correos electrónicos por mes.

Tarde, pero

Además de la corrección DEFAULT_FROM_EMAIL otros han mencionado, y al permitir que las aplicaciones menos seguras accedan a la cuenta, tuve que navegar a https://accounts.google.com/DisplayUnlockCaptcha mientras inicié sesión 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 era la misma; No estoy totalmente seguro de si eso es necesario pero no puede doler. Puede hacerlo así: ssh -D 8080 -fN @ , luego configure su navegador web para que use localhost:8080 como un proxy SOCKS.

Podría usar “Test Mail Server Tool” para probar el envío de correo electrónico en su máquina o localhost. Google y descarga “Test Mail Server Tool” y configúralo.

Luego en tu settings.py:

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

De la shell:

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

Para SendGrid – Django específicamente:

SendGrid Django Docs aquí

Establecer 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.', 'from@example.com', ['to@example.com'], fail_silently=False)