logo cosasdedevs
Enviar emails desde local con Django en Windows y Ubuntu

Enviar emails desde local con Django en Windows y Ubuntu



My Profile
May 12, 2020

¡Hola! Espero que llevéis bien la cuarentena, aquí por lo menos ahora podemos salir a respirar un poco de aire libre en ciertos momentos del día así que ni tan mal 😅 Esperemos que siga mejorando la situación.

Puede que como a mí, muchas veces os haya pasado que estéis probando un código en vuestro local, una de las partes de ese código se encargue de enviar un email pero no tengáis vuestro equipo preparado para ello. Pues bien hoy vamos a ponerle solución con este tutorial 💪

Para el tutorial de hoy vamos a tocar poco Django y realmente valdrá para cualquier lenguaje de programación siempre que tenga la funcionalidad para enviar emails, así que usas otro lenguaje/framework, también te ayudará este tutorial.

Configurar envío de emails en Windows

Para poder enviar de emails desde Windows, necesitaremos instalar un servidor de emails, nosotros usaremos hMailServer, lo podéis descargar desde aquí.

Una vez descargado, abrimos el ejecutable, aceptamos la licencia, seleccionamos la localización (yo he dejado la que viene por defecto).

Después nos dirá que componentes queremos instalar, seleccionaremos todos.

Ahora nos preguntará que tipo de base de datos queremos utilizar, yo he seleccionado Microsoft SQL Compact, esto generará un archivo dentro de la instalación de hMailServer donde se guardarán todas nuestras configuraciones.

Después nos creará el acceso rápido al programa.

Para añadir seguridad nos pedirá un password general para poder acceder a la herramienta.

Y listo, con esto ya lo tenemos instalado, ahora se nos abrirá una ventana en la que seleccionaremos a donde nos queremos conectar. Si no os aparece, en el buscador de Windows poned hMailServer y abrid la aplicación. Seleccionamos localhost, pulsamos connect, insertamos el password y ya podremos acceder al panel de administración de esta herramienta:

Una vez conectados, lo primero que haremos será crear un dominio, yo voy a utilizar simpleblog.local, vosotros configurad el que queráis para vuestras pruebas.

Después vais a la sección Settings/Protocols/SMTP y en el input Local host name, escribís localhost.

Por último vais a la sección con vuestro dominio, en la carpeta Accounts y añadís los usuarios que podrán enviar emails. Yo he añadido un usuario no-reply para mis pruebas, vosotros añadid el que queráis.

Y ya lo tenemos, con esto ya podemos empezar a enviar emails desde nuestro local en Windows.

Configurar envío de emails en Ubuntu

Para la configuración en Ubuntu, vamos a instalar postfix y dovecot. Me he ayudado de estos dos tutoriales para hacerlo funcionar en mi máquina local https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-18-04-es y https://ubuntu.com/server/docs/mail-postfix

Lo primero que haremos será actualizar la caché de paquetes e instalar postfix, utilizaremos DEBIAN... para que al realizar la instalación nos aparezcan opciones que de otra forma se seleccionarían de forma automática.

sudo apt update
sudo DEBIAN_PRIORITY=low apt install postfix

Una vez empecemos con la instalación, se nos abrirá el configurador del paquete, en la primera ventana seleccionaremos Internet Site y continuaremos con la instalación.

Lo siguiente que haremos será añadir nuestro dominio.

Después nos preguntará a donde queremos redireccionar los correos de root y postmaster, yo he puesto mí nombre, tampoco importa mucho lo que pongáis, ya que nosotros lo vamos a usar solo para enviar correos.

Ahora nos aparecerá un listado de dominios que nuestra máquina aceptará como propios, pulsamos ok y continuamos.

En el siguiente paso nos pregunta si queremos forzar actualizaciones sincronizadas en la cola de correo. Le decimos que no.

Esta es una lista de las redes para las cuales la configuración de nuestro servidor de correo establece la transmisión de mensajes. La que viene por defecto debería funcionar así que lo dejamos así. 

Seleccionamos un tamaño máximo para el buzón de correo, yo le he puesto el valor por defecto, ya que lo que nos interesa no es recibir correos sino enviarlos.

Este es el carácter que puede usarse para separar la parte regular de la dirección de una extensión. Lo dejamos como está.

Por último, nos pregunta por los protocolos habilitados, nosotros seleccionaremos all.

Si más adelante necesitas realizar la configuración de nuevo, puedes hacerlo con el siguiente comando:

sudo dpkg-reconfigure postfix

Lo siguiente que haremos será asignar donde guardar la estructura de directorios de postfix dentro de la carpeta personal de usuario en la carpeta Maildir/ y añadiremos un archivo donde guardaremos los alias.

sudo postconf -e 'home_mailbox= Maildir/'
sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

Ahora editamos el archivo y añadimos los alías que queramos:

sudo nano /etc/postfix/virtual

Os dejo un ejemplo de como lo he dejado yo:

contacto@simpleblog.local alberto
hola@simpleblog.local alberto

Una vez cerrado y guardado el archivo, lanzamos el siguiente comando para guardar los cambios:

sudo postmap /etc/postfix/virtual

Si en vuestro equipo tenéis el firewall UFW deberéis lanzar el siguiente comando para que permita el uso de postfix:

sudo ufw allow Postfix

Ahora lanzamos la siguiente lista de comandos para modificar la configuración por defecto en postfix en las que solo deberéis modificar los datos de las tres últimas líneas por tu dominio y los certificados Si no sabéis como generar los certificados, en la web de Ubuntu explican como hacerlo.

sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth'
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_security_options = noanonymous,noplaintext'
sudo postconf -e 'smtpd_sasl_tls_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'myhostname = simpleblog.local'
sudo postconf -e 'smtpd_tls_key_file = /micertificado/private.key'
sudo postconf -e 'smtpd_tls_cert_file = /micertificado/certificate.crt'

Configurar SASL

Postfix soporta dos tipos de configuración SASLCyrus SASL y Dovecot SASL, nosotros usaremos Dovecot lanzando los siguientes comandos:

sudo apt install dovecot-core
sudo apt install libsasl2-modules
sudo apt install libsasl2-dev

Una vez realizada las instalaciones, abrimos el archivo de configuración de dovecot con el siguiente comando:

sudo nano /etc/dovecot/conf.d/10-master.conf

Aquí buscaremos la parte donde se configura la autenticación y modificaremos unix_listener para que quede como en el ejemplo a continuación:

service auth {
  # auth_socket_path points to this userdb socket by default. It's typically
  # used by dovecot-lda, doveadm, possibly imap process, etc. Its default
  # permissions make it readable only by root, but you may need to relax these
  # permissions. Users that have access to this socket are able to get a list
  # of all usernames and get results of everyone's userdb lookups.
  unix_listener auth-userdb {
    #mode = 0600
    #user = 
    #group = 
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }

Reiniciamos los dos servicios y ya debería funcionar correctamente.

sudo service postfix restart
sudo service dovecot restart

Si aun así tenéis problemas a la hora de enviar emails, lo que me ayudó a mí fue realizar una modificación en el archivo de configuración de postfix:

sudo nano /etc/postfix/main.cf

Nos aparecerá un listado con la configuración de postfix. Lo que haremos será comentar la siguiente línea:

#smtpd_sasl_type = dovecot

Una vez hecho esto, reiniciáis el servicio de postfix y ya debería funcionar.

Envío de emails con Django

Ahora que tenemos el sistema configurado, es muy sencillo enviar un email con Django, simplemente abrimos nuestro proyecto, importamos la librería y lanzamos la función donde lo necesitemos:

from django.core.mail import send_mail
send_mail(
    'Asunto',
    'Mensaje',
    'emisor@simpleblog.local',
    ['receptor@simpleblog.local'],
    fail_silently=False,
)

Y listo, si queréis más información acerca del envío de Emails con Django podéis verlo en su documentación.

Espero que este post te ayude y como siempre, te recomiendo seguirme en Twitter para estar al tanto de los nuevo contenido. Ahora también puedes seguirme en Instagram donde estoy subiendo tips, tutoriales en vídeo e información sobre herramientas para developers.

Por último os dejo mi guía para aprender a trabajar con APIs donde explico todo el funcionamiento de una API, el protocolo HTTP y veremos como construir una API con arquitectura REST.

Nos leemos 👋.

1345 vistas

🐍 Sígueme en Twitter

Si te gusta el contenido que subo y no quieres perderte nada, sígueme en Twitter y te avisaré cada vez que cree contenido nuevo 💪
Luego ¡Te sigo!

Nos tomamos en serio tu privacidad

Utilizamos cookies propias y de terceros para recopilar y analizar datos sobre la interacción de los usuarios con cosasdedevs.com. Ver política de cookies.