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 remetenteUm 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 |
|
|
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. |
|
|
A senha SMTP do endereço de remetente, criada no console do Direct Mail. |
|
|
O endereço de resposta. As respostas dos destinatários são encaminhadas para esse endereço. |
|
|
Um único endereço de destinatário. Para enviar para múltiplos destinatários, use a lista |
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 |
|
|
Não é possível alcançar |
|
|
|
|
|
O endereço de remetente foi recusado. Verifique a configuração do endereço de remetente no console. |
|
|
Todos os endereços de destinatário foram rejeitados. Verifique se |
|
|
O servidor retornou um erro nos dados da mensagem. Verifique o corpo e os cabeçalhos do e-mail. |