Todos los productos
Search
Centro de documentos

Direct Mail:Ejemplo de llamada SMTP para Python 2

Última actualización: Sep 03, 2026

Este ejemplo muestra cómo enviar un correo electrónico mediante Direct Mail con Python 2 y el protocolo SMTP. Admite texto sin formato, HTML y varios destinatarios.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Una dirección de remitente creada en la consola de Direct Mail (se usa como valor de username)

  • La contraseña SMTP de dicha dirección de remitente (se usa como valor de password), creada en la consola de Direct Mail dentro de la configuración de la dirección del remitente

  • Una o más direcciones de destinatario

  • (Opcional) Una dirección de respuesta

Envío de correos electrónicos mediante SMTP

El siguiente ejemplo construye un correo electrónico multiparte que incluye cuerpo en texto sin formato y en HTML, y lo envía a través del servidor SMTP de Direct Mail en smtpdm.aliyun.com. Reemplace todos los marcadores '***' por sus valores reales antes de ejecutar el código.

# -*- coding:utf-8 -*-
import smtplib
import email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.base import MIMEBase
from email.mime.application import MIMEApplication
from email.header import Header

# The sender address. This address is created in the console.
username = '***'

# The sender password. This password is created in the console.
password = '***'

# The custom reply-to address.
replyto = '***'

# The recipient address or a list of recipient addresses. Multiple recipients are supported.
# For the specific number of recipients allowed, see the product specifications.
#receivers = ['address1@example.com', 'address2@example.com']
#rcptto = ','.join(rcptto)
rcptto = '***'

# Build the alternative structure.
msg = MIMEMultipart('alternative')
msg['Subject'] = Header('Custom email subject'.decode('utf-8')).encode()
msg['From'] = '%s <%s>' % (Header('Custom sender nickname'.decode('utf-8')).encode(), username)
msg['To'] = rcptto
msg['Reply-to'] = replyto
msg['Message-id'] = email.utils.make_msgid()
msg['Date'] = email.utils.formatdate() 

# Build the text/plain part of the alternative structure.
textplain = MIMEText('Custom plain text content', _subtype='plain', _charset='UTF-8')
msg.attach(textplain)

# Build the text/html part of the alternative structure.
texthtml = MIMEText('Custom HTML content', _subtype='html', _charset='UTF-8')
msg.attach(texthtml)

# Send the email.
try:
    client = smtplib.SMTP()
    # For Python 2.7 or later, create the client this way to use SSL.
    #client = smtplib.SMTP_SSL()

    # The standard SMTP port is 25 or 80.
    client.connect('smtpdm.aliyun.com', 25)

    # Enable DEBUG mode.
    client.set_debuglevel(0)

    client.login(username, password)

    # The sender address and the authentication address must be the same.
    # Note: To get the return value of the DATA command, use the 
    # SMTP.mail, SMTP.rcpt, and SMTP.data methods directly.
    client.sendmail(username, rcptto, msg.as_string())
    # To send to multiple recipients:
    #client.sendmail(username, receivers, msg.as_string())

    client.quit()
    print 'Email sent successfully!'
except smtplib.SMTPConnectError, e:
    print 'Failed to send the email. Connection error: ', e.smtp_code, e.smtp_error
except smtplib.SMTPAuthenticationError, e:
    print 'Failed to send the email. Authentication error: ', e.smtp_code, e.smtp_error
except smtplib.SMTPSenderRefused, e:
    print 'Failed to send the email. Sender refused: ', e.smtp_code, e.smtp_error
except smtplib.SMTPRecipientsRefused, e:
    print 'Failed to send the email. Recipient refused: ', e.smtp_code, e.smtp_error
except smtplib.SMTPDataError, e:
    print 'Failed to send the email. Data error: ', e.smtp_code, e.smtp_error
except smtplib.SMTPException, e:
    print 'Failed to send the email. ', e.message
except Exception, e:
    print 'An exception occurred while sending the email. ', str(e)

Parámetros

Parámetro

Descripción

username

Su dirección de remitente, creada en la consola de Direct Mail. La dirección del remitente y la dirección de autenticación SMTP deben ser iguales.

password

La contraseña SMTP de la dirección del remitente, creada en la consola de Direct Mail.

replyto

La dirección de respuesta. Las respuestas de los destinatarios se entregan en esta dirección.

rcptto

Una única dirección de destinatario. Para enviar a varios destinatarios, utilice la lista receivers y pásela a sendmail().

Opciones de conexión

El ejemplo usa una conexión sin cifrar en el puerto 25. Para usar SSL, reemplace smtplib.SMTP() por smtplib.SMTP_SSL(). Consulte la documentación de Direct Mail para obtener información sobre el puerto SSL y cualquier requisito adicional de conexión.

Para entornos de producción, utilice SSL. Una conexión sin cifrar en el puerto 25 es adecuada para desarrollo y depuración, pero no cifra sus credenciales ni el contenido del mensaje durante la transmisión.

Manejo de errores

Cada bloque de excepción imprime el código de respuesta SMTP y el mensaje de error, lo cual le permite diagnosticar fallos en la entrega:

Excepción

Causa probable

SMTPConnectError

No se puede establecer conexión con smtpdm.aliyun.com. Compruebe su red o las reglas del firewall.

SMTPAuthenticationError

username o password no válidos. Compruebe ambos valores en la consola de Direct Mail.

SMTPSenderRefused

Se rechazó la dirección del remitente. Revise la configuración de la dirección del remitente en la consola.

SMTPRecipientsRefused

Se rechazaron todas las direcciones de destinatario. Compruebe que rcptto sea una dirección válida.

SMTPDataError

El servidor devolvió un error relacionado con los datos del mensaje. Revise el cuerpo y los encabezados del correo electrónico.