Enviar pelo SMTP Relay a partir de Node.js e Python: Nodemailer e smtplib, com STARTTLS

Node.js, Python e Docker·· 13 visualizações· 3 min de leitura

A resposta curta: em Node.js usa-se o Nodemailer; em Python, o smtplib que já vem com a linguagem (ou as configurações de e-mail do Django). Com a porta 587, o link começa sem cifra e passa a cifrada com STARTTLS; com a 465, é cifrada desde o início. Os dados da credencial vão em variáveis de ambiente, nunca escritos no código.

Node.js com o Nodemailer

const nodemailer = require("nodemailer");
const t = nodemailer.createTransport({
host: process.env.SMTP_HOST, port: 587, secure: false, requireTLS: true,
auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASSWORD },
});
await t.sendMail({ from: "no-reply@yourcompany.com", to: "ana@example.com",
subject: "Order confirmed", text: "Thank you for your order." });

Com a porta 587, secure: false e requireTLS: true: o Nodemailer faz o STARTTLS e recusa continuar sem cifra. Com a porta 465, troque para port: 465, secure: true.

Python com o smtplib

import os, smtplib
from email.message import EmailMessage
m = EmailMessage()
m["From"], m["To"] = "no-reply@yourcompany.com", "ana@example.com"
m["Subject"] = "Order confirmed"
m.set_content("Thank you for your order.")
with smtplib.SMTP(os.environ["SMTP_HOST"], 587) as s:
s.starttls()
s.login(os.environ["SMTP_USER"], os.environ["SMTP_PASSWORD"])
s.send_message(m)

Para a porta 465 use smtplib.SMTP_SSL(host, 465) e tire a linha do starttls().

Django

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = os.environ["SMTP_HOST"]
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.environ["SMTP_USER"]
EMAIL_HOST_PASSWORD = os.environ["SMTP_PASSWORD"]
DEFAULT_FROM_EMAIL = "no-reply@yourcompany.com"

Para a porta 465, EMAIL_PORT = 465 e EMAIL_USE_SSL = True em vez de EMAIL_USE_TLS. Nunca os dois ligados ao mesmo tempo.

Porta e cifra trocadas são o erro mais comum aqui. secure: true na porta 587, ou starttls() na 465, dão erro de TLS ou link que não responde. A regra: 587 com STARTTLS, 465 com TLS.

Onde guardar os dados

Nas aplicações Node.js e Python da nossa hospedagem, as variáveis de ambiente definem-se na própria página da aplicação no cPanel (Setup Node.js App ou Setup Python App). Num VPS, num arquivo .env fora da pasta pública ou no serviço que arranca a aplicação. Uma credencial para cada aplicação: veja uma credencial por programa.

Ferramentas de automação também falam SMTP. No n8n, por exemplo, o nó de envio de e-mail aceita estes mesmos dados: veja ligar o n8n ao e-mail.

A aplicação continua sem enviar? Abra um pedido com a mensagem de erro completa, sem a senha.

Abrir pedido de suporte

VEJA TAMBÉM

SMTP Relay no Laravel e em outras frameworks PHP: as configurações do .env e o primeiro e-mail de teste

Testar uma credencial SMTP antes de a pôr a trabalhar: um e-mail de teste pela linha de comandos

SMTP Relay em qualquer programa: o que querem dizer Servidor, Porta, Cifra, Usuário e Remetente

Ligar o n8n ao e-mail: SMTP e IMAP

Um relatório agendado por e-mail: um script, uma tarefa cron e uma conta SMTP

O SMTP Relay não envia: link, TLS, autenticação, remetente e destinatário, um a um

PRODUTO RECOMENDADO

E-mail profissional no seu domínio

Caixas com o nome da sua empresa, sem publicidade, com filtro de spam. desde R$ 36,30/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.