Ruby、Python、Node.js、Go でメール送信する方法 - Mailer To Go を使用
Mailer To Go を通じてトランザクショナルメールを送信する方法は、今日では SMTP です。フレームワークの組み込みメーラーを当社の送信エンドポイントに向けるだけで、数分以内に、任意の言語から送信できます。このガイドには Ruby、Python、Node.js、Go での動作例があります。(JSON REST API は開発中です — 最後のメモを参照してください。)
ここにあるすべては、データプレーン です — 実際にメールを送信します。コントロールプレーン (配信/バウンスイベント、インバウンド受信、およびプロビジョニング) は、後で独自のガイドが付属する別のサーフェスです。
認証情報を取得する
ダッシュボードから、SMTP ユーザー名とパスワード を取得し、環境変数として設定します。Heroku と Build.io では、アドオンをプロビジョニングすると、これらは自動的に設定変数として設定されます。
export MAILERTOGO_SMTP_HOST=smtp.mailertogo.com # 正確なホストはダッシュボードに表示されます
export MAILERTOGO_SMTP_USER=... # ダッシュボードから
export MAILERTOGO_SMTP_PASSWORD=... # ダッシュボードから
確認済みドメイン上のアドレスから送信します (ドメイン設定と認証を参照)。Mailer To Go は確認されていない From: ドメインを拒否します。
SMTP で送信する
ダッシュボードから SMTP ホスト、ポート 587 (STARTTLS) または 465 (SSL)。標準 SMTP であるため、お使いの言語の組み込みメーラーはすでにそれをサポートしています。
Ruby (mail gem):
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 (標準ライブラリ 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 (標準ライブラリ 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)
}
}
プレーンテキストの代わりに HTML を送信する場合は、メッセージの HTML パート (Ruby mail gem の html_part、Python の add_alternative(..., subtype="html")、Nodemailer の html フィールド、または Go の Content-Type: text/html ヘッダー) を設定します — 他はすべて同じです。
本番環境のヒント
- 認証情報を環境変数に保管します — ソースコードには決して含めないでください。Heroku/Build.io ではすでに設定変数です。
- 確認済みドメインから送信します — できれば
mtg.yourdomain.comのようなサブドメイン。 - ポート 587 を STARTTLS で使用 (または 465 を SSL で使用) — 常に転送中は暗号化されます。
- バックグラウンドジョブから送信します — ウェブリクエストにはインラインではなく、バックオフで一時的な失敗を再試行します。ハードバウンスは自動的に抑制リストに追加されます。
REST API は開発中です
SMTP 接続を保持するのではなく HTTP 呼び出しを行いたいチームの場合は、JSON 送信 API が近日公開予定です。計画された形式:
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", // または配列、最大 50 件の受信者
"subject": "Hello",
"html": "...", "text": "...", // どちらか一方または両方を提供
"reply_to": "support@yourdomain.com",
"tags": [ { "name": "campaign", "value": "welcome" } ]
}
キューに入れられたメッセージの id を返します。このエンドポイントはまだライブではありません — 今日は SMTP で送信してください。REST API がリリースされると、このポストを更新します。(より広いコントロールプレーン API — イベント、インバウンド受信、プロビジョニング — は別途追跡されます。)
特定のプラットフォームにデプロイしていますか? Heroku から トランザクショナルメールを送信を参照してください。別のプロバイダーから移行していますか? SendGrid、Mailgun、Amazon SES からの移行ガイドを参照してください。