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:
¿No puedes usar localhost (simple ubuntu pc) para enviar correos electrónicos?
Pensé en django 1.3
send_mail()
está algo obsoleto y seEmailMessage.send()
su lugar?
- Crear un proyecto:
django-admin.py startproject gmail
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
Ejecute el modo interactivo:
python manage.py shell
Importar el módulo EmailMessage:
from django.core.mail import EmailMessage
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:
- Crea una cuenta SendGrid (y verifica tu correo electrónico)
- 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:
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