Guías y tutoriales

Cientos de tutoriales y guías paso a paso cuidadosamente escritas por nuestro equipo de soporte.

Cómo enviar correos desde Python

Para enviar correos electrónicos desde Python3 de forma autenticada a través de SMTP, puedes utilizar la librería smtplib.

Necesitarás los datos de acceso a la cuenta de correo desde la que se van a enviar los correos, junto con los datos de acceso al servidor. En este caso, utilizaremos los siguientes datos:

  • Remitente: python@swmanuales.com
  • Contraseña: Password
  • Servidor: mail.swmanuales.com
  • Puerto: 465

info Es recomendable tener instalado un certificado TLS para el correo electronico. Puedes instalarlo desde el siguiente manual.

Envío de un correo en formato texto plano

El código del envío de un correo en texto plano y en HTML es muy similar.

En este caso, estamos enviando un correo al destino 'correoDeDestino@swhosting.com', con el asunto "Bienvenido/a a SWPanel" y el texto: "Bienvenido/a a SWPanel Accede a tu SWPanel: https://swpanel.com" en formato de texto plano.

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# Configuración de la conexión
sender = 'python@swmanuales.com'
password = 'Password'
server = 'mail.swmanuales.com'
port = 465

# Configuración del destinatario
to = 'correoDeDestino@swhosting.com'

# configuración de las cabeceras y del mensaje
message = MIMEMultipart("alternative")
message["Subject"] = "Bienvenido/a a SWPanel"
message["From"] = sender
message["To"] = to

body = """
Bienvenido/a a SWPanel

Accede a tu SWPanel: https://swpanel.com
"""

part = MIMEText(body, "plain")
message.attach(part)

# Envío del mensaje
try:
    smtp_server = smtplib.SMTP_SSL(server, port)
    smtp_server.ehlo()
    smtp_server.login(sender, password)
    smtp_server.sendmail(sender, to, message.as_string())
    smtp_server.close()
    print ("¡Se ha enviado correctamente!")
except Exception as ex:
    print ("Ha ocurrido un error...",ex)

Para ejecutarlo, podemos utilizar el siguiente comando desde el terminal:

python3 nombre_del_fichero.py

Si todo ha ido bien, nos debería retornar: "¡Se ha enviado correctamente!".

Envío de un correo en formato HTML

Para enviar un correo con contenido HTML, podemos utilizar esta variante del código. El formato en HTML nos permite agregar estilos al mensaje:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# Configuración de la connexión
sender = 'python@swmanuales.com'
password = 'Password'
server = 'mail.swmanuales.com'
port = 465

# Configuración del destinatario
to = 'correoDeDestino@dominio.com'

# Configuración de las cabeceras y del mensaje
message = MIMEMultipart("alternative")
message["Subject"] = "Bienvenido/a a SWPanel"
message["From"] = sender
message["To"] = to

body = """\
<html>
<head>
    <style>
        .boton {
            background-color: #089cff;
            color: white;
            padding: 10px 20px;
            text-decoration: none;
            border-radius: 5px;
        }
    </style>
</head>
<body>
    <h1>Bienvenido/a a SWPanel</h1>
    <p><a href="https://swpanel.com" class="boton">Accede a tu SWPanel</a></p>
</body>
</html>
"""


part = MIMEText(body, "html")
message.attach(part)

# Envío del mensaje
try:
    smtp_server = smtplib.SMTP_SSL(server, port)
    smtp_server.ehlo()
    smtp_server.login(sender, password)
    smtp_server.sendmail(sender, to, message.as_string())
    smtp_server.close()
    print ("¡Se ha enviado correctamente!")
except Exception as ex:
    print ("Ha ocurrido un error...",ex)

Para ejecutarlo, podemos utilizar el siguiente comando desde el terminal:

python3 nombre_del_fichero.py

Si todo ha ido bien, nos debería retornar: "¡Se ha enviado correctamente!".

Automatización del envío de correo

A partir del código anterior, podemos definir una función que se encargará de enviar el correo electrónico y, a través de una lista, podemos definir el contenido de los correos que enviaremos.

De esta forma, no necesitaremos editar el documento para cambiar el destinatario ni el contenido del correo.

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import sys

# Creación de la función que realiza el envío
def send_mail(destination, subject, body):
  # Configuración de la conexión
  sender = 'python@swmanuales.com'
  password = 'Password'
  server = 'mail.swmanuales.com'
  port = 465

  # Configuración de las cabeceras y del mensaje
  message = MIMEMultipart("alternative")
  message["Subject"] = subject
  message["From"] = sender
  message["To"] = destination

  part = MIMEText(body, "html")
  message.attach(part)

  # Envío del mensaje
  try:
      smtp_server = smtplib.SMTP_SSL(server, port)
      smtp_server.ehlo()
      smtp_server.login(sender, password)
      smtp_server.sendmail(sender, destination, message.as_string())
      smtp_server.close()
      print ("¡Se ha enviado correctamente!")
  except Exception as ex:
      print ("Ha ocurrido un error...",ex)



text = {
  #'identificador': ['Asunto', 'cuerpo']
  'welcome': ['Bienvenido/a a SWPanel', '<html> <head> <style> .boton { background-color: #089cff; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; } </style> </head> <body> <h1>Bienvenido/a a SWPanel</h1> <p><a href="https://swpanel.com" class="boton">Accede a tu SWPanel</a></p> </body> </html>'],
  'other_text': 'other text',
  'other_text2': 'other text 2',
}


message = text[sys.argv[0]]
subject = message[0]
body = message[1]

# Configuración del destinatario
destination = sys.argv[1]

send_mail(destination, subject, body)

En el momento de ejecutar el fichero por consola, le indicaremos que tipo de correo queremos enviar y el destinatario al que lo debe enviar.

Para ejecutarlo, podemos utilizar el siguiente comando desde el terminal:

python3 nombre_del_fichero.py welcome correoDeDestino@dominio.com

Dónde 'welcome' es el identificador en la lista y 'correoDeDestino@dominio.com' es la cuenta de destino.

Si todo ha ido bien, nos debería retornar: "¡Se ha enviado correctamente!".