Cómo Enviar Correos Electrónicos en Ruby, Python, Node.js y Go Con Mailer To Go
La forma de enviar correo transaccional a través de Mailer To Go hoy es SMTP: apunta el mailer integrado de tu framework a nuestro endpoint de envío y estarás enviando en minutos, desde cualquier lenguaje. Esta guía tiene ejemplos funcionales en Ruby, Python, Node.js y Go. (Una API REST JSON está en desarrollo — consulta la nota al final.)
Todo aquí es el plano de datos — enviar correo realmente. El plano de control (eventos de entrega/rebote, recepción entrante y provisioning) es una superficie separada con su propia guía que llegará más adelante.
Obtén tus credenciales
Desde tu dashboard, obtén tu nombre de usuario y contraseña SMTP, y establécelos como variables de entorno. En Heroku y Build.io estos se establecen automáticamente como variables de configuración cuando aprovisionas el complemento.
export MAILERTOGO_SMTP_HOST=smtp.mailertogo.com # el host exacto se muestra en tu dashboard
export MAILERTOGO_SMTP_USER=... # desde dashboard
export MAILERTOGO_SMTP_PASSWORD=... # desde dashboard
Envía desde una dirección en un dominio que hayas verificado (consulta configuración de dominio y autenticación); Mailer To Go rechaza dominios From: no verificados.
Envía sobre SMTP
Host SMTP desde tu dashboard, puerto 587 (STARTTLS) o 465 (SSL). Porque es SMTP estándar, el mailer integrado de tu lenguaje ya lo habla.
Ruby (la gema mail):
require "mail"
Mail.defaults do
delivery_method :smtp,
address: ENV["MAILERTOGO_SMTP_HOST"], port: 587,
user_name: ENV["MAILERTOGO_SMTP_USER"],
password: ENV["MAILERTOGO_SMTP_PASSWORD"],
authentication: :plain, enable_starttls_auto: true
end
Mail.deliver do
from "Acme <hello@yourdomain.com>"
to "user@example.com"
subject "Hello from Ruby"
body "Your email body here."
end
Python (librería estándar smtplib):
import os, smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "Acme <hello@yourdomain.com>"
msg["To"] = "user@example.com"
msg["Subject"] = "Hello from Python"
msg.set_content("Your email body here.")
with smtplib.SMTP(os.environ["MAILERTOGO_SMTP_HOST"], 587) as s:
s.starttls()
s.login(os.environ["MAILERTOGO_SMTP_USER"], os.environ["MAILERTOGO_SMTP_PASSWORD"])
s.send_message(msg)
Node.js (Nodemailer):
const nodemailer = require("nodemailer");
const transport = nodemailer.createTransport({
host: process.env.MAILERTOGO_SMTP_HOST,
port: 587,
auth: { user: process.env.MAILERTOGO_SMTP_USER, pass: process.env.MAILERTOGO_SMTP_PASSWORD },
});
await transport.sendMail({
from: "Acme <hello@yourdomain.com>",
to: "user@example.com",
subject: "Hello from Node",
text: "Your email body here.",
});
Go (librería estándar net/smtp):
package main
import (
"net/smtp"
"os"
)
func main() {
host := os.Getenv("MAILERTOGO_SMTP_HOST")
auth := smtp.PlainAuth("", os.Getenv("MAILERTOGO_SMTP_USER"), os.Getenv("MAILERTOGO_SMTP_PASSWORD"), host)
msg := []byte("To: user@example.com\r\n" +
"From: Acme <hello@yourdomain.com>\r\n" +
"Subject: Hello from Go\r\n\r\n" +
"Your email body here.\r\n")
if err := smtp.SendMail(host+":587", auth, "hello@yourdomain.com", []string{"user@example.com"}, msg); err != nil {
panic(err)
}
}
¿Enviando HTML en lugar de texto plano? Establece la parte HTML del mensaje (html_part en la gema mail de Ruby, add_alternative(..., subtype="html") en Python, el campo html en Nodemailer, o un encabezado Content-Type: text/html en Go) — todo lo demás permanece igual.
Consejos de producción
- Mantén credenciales en variables de entorno, nunca en código fuente. En Heroku/Build.io ya son variables de configuración.
- Envía desde tu dominio verificado, idealmente un subdominio como
mtg.yourdomain.com. - Usa puerto 587 con STARTTLS (o 465 con SSL) — siempre encriptado en tránsito.
- Envía desde un trabajo en segundo plano, no en línea en una solicitud web, y reintenta fallos transitorios con backoff. Los rechazos difíciles se agregan automáticamente a tu lista de supresión.
Una API REST está en desarrollo
Para equipos que prefieren hacer una llamada HTTP en lugar de mantener una conexión SMTP, una API de envío JSON está por llegar. La forma planeada:
POST https://api.mailertogo.com/api/v1/emails
Authorization: Bearer <your API key>
Content-Type: application/json
{
"from": "hello@yourdomain.com",
"to": "user@example.com", // o un array, hasta 50 destinatarios
"subject": "Hello",
"html": "...", "text": "...", // proporciona uno o ambos
"reply_to": "support@yourdomain.com",
"tags": [ { "name": "campaign", "value": "welcome" } ]
}
Devolverá el id del mensaje en cola. Este endpoint aún no está activo — envía sobre SMTP hoy, y actualizaremos esta publicación cuando se lance la API REST. (La API del plano de control más amplia — eventos, recepción entrante, provisioning — se rastrea por separado.)
¿Desplegando en una plataforma específica? Consulta Enviar correo transaccional desde Heroku. ¿Migrando desde otro proveedor? Consulta las guías para SendGrid, Mailgun y Amazon SES.