Todos os produtos
Search
Central de documentação

Direct Mail:Exemplo de chamada SMTP com Python 2

Última atualização: Jun 27, 2026

Este exemplo mostra como enviar um e-mail pelo Direct Mail usando Python 2 e o protocolo SMTP, com suporte a texto simples, HTML e múltiplos destinatários.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um endereço de remetente criado no console do Direct Mail (usado como o valor de username)

  • A senha SMTP desse endereço de remetente (usada como o valor de password), criada no console do Direct Mail, nas configurações do endereço de remetente

  • Um ou mais endereços de destinatário

  • (Opcional) Um endereço de resposta

Enviar e-mails pelo SMTP

O exemplo a seguir cria um e-mail multiparte com partes de corpo em texto simples e HTML e, em seguida, envia pelo servidor SMTP do Direct Mail em smtpdm.aliyun.com. Substitua todos os marcadores '***' pelos seus valores reais antes de executar.

# -*- 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

Descrição

username

Seu endereço de remetente, criado no console do Direct Mail. O endereço de remetente e o endereço de autenticação SMTP devem ser iguais.

password

A senha SMTP do endereço de remetente, criada no console do Direct Mail.

replyto

O endereço de resposta. As respostas dos destinatários são encaminhadas para esse endereço.

rcptto

Um único endereço de destinatário. Para enviar para múltiplos destinatários, use a lista receivers e passe-a para sendmail().

Opções de conexão

O exemplo usa uma conexão não criptografada na porta 25. Para usar SSL, substitua smtplib.SMTP() por smtplib.SMTP_SSL(). Consulte a documentação do Direct Mail para o número da porta SSL e os requisitos adicionais de conexão.

Em ambientes de produção, use SSL. Uma conexão não criptografada na porta 25 funciona para desenvolvimento e depuração, mas não criptografa suas credenciais ou o conteúdo da mensagem em trânsito.

Tratamento de erros

Cada bloco de exceção imprime o código de resposta SMTP e a mensagem de erro, que você pode usar para diagnosticar falhas de entrega:

Exceção

Causa provável

SMTPConnectError

Não é possível alcançar smtpdm.aliyun.com. Verifique sua rede ou as regras de firewall.

SMTPAuthenticationError

username ou password inválidos. Verifique ambos no console do Direct Mail.

SMTPSenderRefused

O endereço de remetente foi recusado. Verifique a configuração do endereço de remetente no console.

SMTPRecipientsRefused

Todos os endereços de destinatário foram rejeitados. Verifique se rcptto é um endereço válido.

SMTPDataError

O servidor retornou um erro nos dados da mensagem. Verifique o corpo e os cabeçalhos do e-mail.