Comment Envoyer des E-mails en Ruby, Python, Node.js et Go avec Mailer To Go
La façon d’envoyer des emails transactionnels via Mailer To Go aujourd’hui est SMTP : pointez le mailer intégré de votre framework vers notre endpoint de soumission et vous envoyez en minutes, depuis n’importe quel langage. Ce guide contient des exemples fonctionnels en Ruby, Python, Node.js et Go. (Une API REST JSON est en développement — voir la note à la fin.)
Tout ce qui suit est le plan de données — l’envoi réel de mail. Le plan de contrôle (événements de livraison/rebond, réception entrante et approvisionnement) est une surface distincte avec son propre guide qui arrivera plus tard.
Récupérez vos identifiants
Depuis votre tableau de bord, récupérez votre nom d’utilisateur et mot de passe SMTP, et définissez-les comme variables d’environnement. Sur Heroku et Build.io, ceux-ci sont définis automatiquement comme variables de configuration lorsque vous approvisionnez le module complémentaire.
export MAILERTOGO_SMTP_HOST=smtp.mailertogo.com # l'hôte exact est affiché dans votre tableau de bord
export MAILERTOGO_SMTP_USER=... # depuis le tableau de bord
export MAILERTOGO_SMTP_PASSWORD=... # depuis le tableau de bord
Envoyez depuis une adresse sur un domaine que vous avez vérifié (voir configuration du domaine et authentification) ; Mailer To Go rejette les domaines From: non vérifiés.
Envoyez par SMTP
Hôte SMTP depuis votre tableau de bord, port 587 (STARTTLS) ou 465 (SSL). Parce que c’est du SMTP standard, le mailer intégré de votre langage le comprend déjà.
Ruby (la gem 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 (stdlib 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 (stdlib 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)
}
}
Envoyez du HTML à la place du texte brut ? Définissez la partie HTML du message (html_part dans la gem Ruby mail, add_alternative(..., subtype="html") en Python, le champ html dans Nodemailer, ou un en-tête Content-Type: text/html en Go) — tout le reste reste identique.
Conseils de production
- Conservez les identifiants dans les variables d’environnement, jamais dans la source. Sur Heroku/Build.io, ce sont déjà des variables de configuration.
- Envoyez depuis votre domaine vérifié, idéalement un sous-domaine comme
mtg.yourdomain.com. - Utilisez le port 587 avec STARTTLS (ou 465 avec SSL) — toujours chiffré en transit.
- Envoyez depuis une tâche en arrière-plan, pas en ligne dans une requête web, et recommencez les défaillances transitoires avec backoff. Les rebonds durs sont ajoutés automatiquement à votre liste de suppression.
Une API REST est en développement
Pour les équipes qui préfèrent faire un appel HTTP plutôt que de maintenir une connexion SMTP, une API d’envoi JSON est en préparation. La forme prévue :
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", // ou un tableau, jusqu'à 50 destinataires
"subject": "Hello",
"html": "...", "text": "...", // fournissez l'un ou l'autre ou les deux
"reply_to": "support@yourdomain.com",
"tags": [ { "name": "campaign", "value": "welcome" } ]
}
Elle retournera l’id du message en file d’attente. Cet endpoint n’est pas encore actif — envoyez par SMTP aujourd’hui, et nous mettrons à jour cet article lorsque l’API REST sera déployée. (L’API du plan de contrôle plus large — événements, réception entrante, approvisionnement — est suivi séparément.)
Déploiement sur une plateforme spécifique ? Voir Envoyer des emails transactionnels depuis Heroku. Migration d’un autre fournisseur ? Voir les guides pour SendGrid, Mailgun et Amazon SES.