Читать книгу Django 2 - Antonio Melé - Страница 47
Enviar emails con Django
ОглавлениеEnviar emails con Django es una acción muy directa. Primero hay que disponer de un servidor SMTP local o definir uno externo en la configuración, incluyendo la siguiente información en el fichero de configuración settigns.py del proyecto:
• EMAIL_HOST es el nombre donde se aloja el servidor SMTP. Por defecto es localhost.
• EMAIL_PORT es el puerto del SMTP. Por defecto es 25.
• EMAIL_HOST_USER es el usuario del servidor SMTP.
• EMAIL_HOST_PASSWORD es la contraseña de usuario del servidor SMTP.
• EMAIL_USE_TLS indica si debe usar la conexión segura sobre TLS.
• EMAIL_USE_SSL indica si usar una conexión TLS implícita.
Si no dispone de un servidor SMTP, puede indicar a Django que escriba los emails en la consola, a través de la siguiente línea en la configuración:
Con esta configuración, Django escribirá todos los emails a través del intérprete. Esta opción es útil para tareas de validación de la aplicación sin disponer de un servidor SMTP.
Si lo que quiere es enviar emails, pero no dispone de un servidor SMTP local, puede usar la configuración del servidor SMTP del proveedor de servicio de email. Por ejemplo, la siguiente configuración es válida para enviar correos electrónicos a través de los servidores de Gmail con una cuenta de Google:
Ejecute el comando python manage.py shell para abrir un intérprete de Python y enviar un email del siguiente modo:
La función send_mail() recoge el asunto, el mensaje, el remitente y una lista de los destinatarios como argumentos necesarios. Entre los argumentos opcionales existe fail_silently=False, que permite no elevar excepciones en caso de no poder mandar correctamente el email. Como salida se obtiene el número de emails enviados correctamente, por lo que si la salida obtenida es 1, entonces el email ha sido enviado.
Si envía emails con Gmail con la configuración anterior, hay que tener en cuenta activar el acceso para aplicaciones menos seguras en https://myaccount.google.com/lesssecureapps del siguiente modo:
Ahora, va a incorporar la funcionalidad dentro de la vista.
Para ello va a editar la vista post_share en el fichero views.py de la aplicación de blog:
Ha declarado una variable sent y la ha inicializado a True cuando el artículo se envía. Esta variable la usará más tarde para mostrar un mensaje en la plantilla, indicando que el formulario se ha enviado correctamente. Dada la necesidad de incluir en el correo un enlace al artículo, es necesario recuperar la ruta absoluta con el método get_absolute_url(). Se usa esta ruta como parámetro de entrada para request.build_absolute_uri(), construyendo una URL completa, incluyendo el esquema HTTP y nombre de dominio. Para construir el asunto y el cuerpo del mensaje se utilizan los datos procesados del formulario, una vez validado, y, por último, se envía el correo a la dirección estipulada en el campo to del formulario.
Ahora que la vista está completa, recuerde que es necesario añadir un nuevo patrón de URL. Para ello habrá que editar el fichero urls.py de la aplicación blog e incluir el patrón para la vista post_share: