python - mimemultipart - Django enviando correo electrónico
send email from python (7)
Primero crea una contraseña específica de la aplicación
- Visita la página de seguridad de tu cuenta de Google .
- En el cuadro
2-Step Verification
, haga clic enSettings
(si no hay un vínculo de configuración, puede crear uno nuevo. Puede omitir los pasos 3 y 4). - Haga clic en la pestaña de
App-specific passwords
. - Haz clic en
Manage your application specific passwords
. - En la sección
Application-specific passwords
laApplication-specific passwords
, ingrese un nombre descriptivo para la aplicación que desea autorizar, como "Django gmail" y haga clic enGenerate application-specific password
botón deGenerate application-specific password
. - anote la contraseña. por ejemplo:
smbumqjiurmqrywn
A continuación, agregue los valores adecuados a settings.py:
EMAIL_HOST = ''smtp.gmail.com''
EMAIL_HOST_USER = ''[email protected]''
EMAIL_HOST_PASSWORD = ''Application spectific password(for eg: smbumqjiurmqrywn)''
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Puede usar el shell para probarlo:
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail(''Test'', ''This is a test'', ''[email protected]'', [''[email protected]''],
fail_silently=False)
Sé que hay 20 preguntas similares a las mías, pero he intentado durante más de un día obtener un correo electrónico para trabajar con Django.
Recibo este error: [Errno 111] Connection refused
cuando intento enviar un correo electrónico.
Aquí es donde creo el correo electrónico e intento enviarlo en mi opinión:
try:
msg = EmailMessage(subject, message, from_email, [receiver])
msg.content_subtype = "html"
msg.send()
Mi archivo de configuración es el siguiente:
EMAIL_HOST = "localhost"
DEFAULT_FROM_EMAIL = "[email protected]"
EMAIL_PORT = 25
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
He intentado hacer el envío de prueba usando python -m smtpd -n -c DebuggingServer localhost:1025
y tuve éxito, pero cuando se trata de hacerlo de verdad, no tuve éxito.
Cuando intento hacer un send_mail desde el shell obtengo este rastreo:
>>> from django.core.mail import send_mail
>>> send_mail(''Test'', ''Test'', ''[email protected]'', [''[email protected]''])
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/__init__.py", line 61, in send_mail
connection=connection).send()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/message.py", line 251, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 79, in send_messages
new_conn_created = self.open()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 42, in open
local_hostname=DNS_NAME.get_fqdn())
File "/usr/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/usr/lib/python2.6/socket.py", line 561, in create_connection
raise error, msg
error: [Errno 111] Connection refused
Simplemente no parece estar llegando a nada con esto. Cualquier ayuda o consejo sería muy apreciada. Gracias
Además, si hay algo más que le gustaría ver, simplemente coméntelo.
- Habilita pop3 en la configuración de gmail.
- crea una contraseña específica para la aplicación para esta aplicación django. (http://support.google.com/accounts/bin/answer.py?hl=es&answer=185833)
¿Estás tratando de usar una cuenta de Gmail? Quizás intente esto entonces:
EMAIL_HOST = ''smtp.gmail.com''
EMAIL_HOST_USER = ''[email protected]''
EMAIL_HOST_PASSWORD = ''your-password''
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Luego prueba try (django <1.4) por
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail(''test email'', ''hello world'', to=[''[email protected]''])
Y si usa django 1.4, use esto:
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail(''test email'', ''hello world'', ''[email protected]'', [''[email protected]''])
Si no está usando una cuenta de Gmail y sigue teniendo problemas, intente agregar EMAIL_HOST_USER
y EMAIL_HOST_PASSWORD
a lo que tiene. Si todavía tiene problemas, tal vez su red lo esté bloqueando. Cortafuegos en su sistema operativo o enrutador.
Gracias a knite por la sintaxis actualizada. Lánzalo a +1 y gracias a pranavk por informarme sobre el cambio de sintaxis en django 1.4
@mongoose_za tiene una gran respuesta, pero la sintaxis es un poco diferente en Django 1.4+.
En lugar de:
send_mail(''test email'', ''hello world'', to=[''[email protected]''])
utilizar
send_mail(''test email'', ''hello world'', ''[email protected]'', [''[email protected]''])
Los primeros cuatro argumentos son obligatorios: asunto, mensaje, from_email y recipient_list.
En settings.py, use smtp como back-end y no como consola
EMAIL_BACKEND = ''django.core.mail.backends.smtp.EmailBackend''
Evitaría usar GMail. Funcionará para algunos correos electrónicos, pero después de eso, puede encontrar que todos sus correos electrónicos están siendo rechazados o enlatados con spam. Usé el servicio "SES" de Amazon con Django-SES para resolver esto.
ponga la siguiente configuración mínima en el archivo settings.py o local_settings.py en su servidor.
EMAIL_HOST = ''localhost''
EMAIL_PORT = 587
EMAIL_USE_TLS = True
en lugar de usar smtp.gmail.com, que impone muchas limitaciones, puede tener su propio servidor de correo.
puede hacerlo instalando su propio servidor de correo:
sudo apt-get install sendmail