mimetext mimemultipart library from body python django smtp

python - mimemultipart - Django enviando correo electrónico



send email from python (7)

Primero crea una contraseña específica de la aplicación

  1. Visita la página de seguridad de tu cuenta de Google .
  2. En el cuadro 2-Step Verification , haga clic en Settings (si no hay un vínculo de configuración, puede crear uno nuevo. Puede omitir los pasos 3 y 4).
  3. Haga clic en la pestaña de App-specific passwords .
  4. Haz clic en Manage your application specific passwords .
  5. En la sección Application-specific passwords la Application-specific passwords , ingrese un nombre descriptivo para la aplicación que desea autorizar, como "Django gmail" y haga clic en Generate application-specific password botón de Generate application-specific password .
  6. 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.


  1. Habilita pop3 en la configuración de gmail.
  2. 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