OSSメールマーケティング比較:Listmonk vs Mautic vs Postal でメルマガ配信をセルフホスト
オープンソースラボ編集部 ・ 2026年6月13日
OSSメールマーケティング比較:Listmonk vs Mautic vs Postal でメルマガ配信をセルフホスト
Mailchimp(月$20〜)・Brevo(旧Sendinblue、月$25〜)に対して、Listmonk(高速・軽量のメールキャンペーン管理)・Mautic(マーケティングオートメーション統合)・Postal(SMTPサーバー機能付きメール配信プラットフォーム)はOSSのメールマーケティングツールです。
セルフホストメール配信のメリット
- コスト削減: 月10万通以上送る場合、Mailchimpより90%以上安くなるケースも
- データ主権: 購読者リストを自社サーバーに保管
- 送信ドメインの完全コントロール: DMARC・DKIM・SPFを自社で管理
- カスタマイズ: カスタムテンプレート・タグ・セグメント設定が自由
主要ツールの概要
Listmonk
2020年に公開されたGo製の高速メールキャンペーン管理ツールです。GitHubスター15k+。シンプルで高速(月10万通以上でも快適)で、キャンペーン・トランザクションメール・購読者管理・テンプレートを提供。APIファーストな設計でCI/CDから自動送信が簡単。Amazon SES・Postfix・MailgunなどのSMTPサービスをバックエンドとして使います。
# docker-compose.yml - Listmonk
version: '3.8'
services:
app:
image: listmonk/listmonk:latest
ports:
- "9000:9000"
environment:
LISTMONK_app__address: "0.0.0.0:9000"
LISTMONK_db__host: db
LISTMONK_db__port: 5432
LISTMONK_db__user: listmonk
LISTMONK_db__password: listmonk_password
LISTMONK_db__database: listmonk
depends_on:
- db
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: listmonk
POSTGRES_PASSWORD: listmonk_password
POSTGRES_DB: listmonk
volumes:
- listmonk_db:/var/lib/postgresql/data
volumes:
listmonk_db:
# 初回セットアップ(DBスキーマ作成)
# docker run --rm listmonk/listmonk:latest --install
# Listmonk REST APIでメール送信を自動化
import requests
LISTMONK_URL = "https://mail.yourcompany.com"
AUTH = ("admin", "your-admin-password")
# 購読者を追加
subscriber_resp = requests.post(
f"{LISTMONK_URL}/api/subscribers",
auth=AUTH,
json={
"email": "john@example.com",
"name": "John Doe",
"status": "enabled",
"lists": [1], # リストID(事前に作成が必要)
"attribs": {"plan": "pro", "company": "Acme Corp"},
},
)
print(f"Subscriber: {subscriber_resp.json()['data']['uuid']}")
# トランザクションメールを送信(注文確認・パスワードリセット等)
tx_resp = requests.post(
f"{LISTMONK_URL}/api/tx",
auth=AUTH,
json={
"subscriber_email": "john@example.com",
"template_id": 2, # テンプレートID
"data": {
"order_id": "ORD-12345",
"product_name": "Pro Plan",
"amount": "9800",
},
"headers": [{"X-Customer-ID": "cust-123"}],
},
)
print(f"Sent: {tx_resp.status_code}")
# キャンペーン(メルマガ)を作成・送信
campaign_resp = requests.post(
f"{LISTMONK_URL}/api/campaigns",
auth=AUTH,
json={
"name": "7月のニュースレター",
"subject": "【OSSラボ】今月の新着ツール5選",
"lists": [1], # 配信リスト
"template_id": 1,
"from_email": "newsletter@yourcompany.com",
"content_type": "richtext",
"body": "<h1>今月のOSSニュース</h1><p>今月は...</p>",
"tags": ["newsletter", "monthly"],
},
)
campaign_id = campaign_resp.json()["data"]["id"]
# キャンペーンを送信開始
requests.put(
f"{LISTMONK_URL}/api/campaigns/{campaign_id}/status",
auth=AUTH,
json={"status": "running"},
)
print(f"Campaign {campaign_id} started")
Mautic
2014年に公開されたPHP製のオープンソースマーケティングオートメーションプラットフォームです。GitHubスター7k+。HubSpotのOSS代替として、メールキャンペーン・ランディングページ・フォーム・リード管理・スコアリング・ワークフロー自動化を統合します。キャンペーンビルダーで「メール開封 → 3日後にフォローアップメール送信」といった自動化フローをビジュアルで作成できます。
# MauticをDockerで起動
git clone https://github.com/mautic/docker-mautic.git
cd docker-mautic
cat > .env << 'EOF'
MAUTIC_DB_HOST=db
MAUTIC_DB_USER=mautic
MAUTIC_DB_PASSWORD=mautic_password
MAUTIC_DB_NAME=mautic
MAUTIC_RUN_CRON_JOBS=true
MAUTIC_TRUSTED_PROXIES=["0.0.0.0/0"]
EOF
docker compose up -d
# WebUI: http://localhost:8080
// Mautic API - リードを作成してセグメントに追加
// MauticのAPIクライアントライブラリを使用
use Mautic\Auth\ApiAuth;
use Mautic\MauticApi;
$initAuth = new ApiAuth();
$auth = $initAuth->newAuth([
'baseUrl' => 'https://mautic.yourcompany.com',
'version' => 'OAuth2',
'clientKey' => 'your-client-key',
'clientSecret' => 'your-client-secret',
'callback' => 'https://yourapp.com/auth-callback',
]);
$api = new MauticApi();
$contactApi = $api->newApi('contacts', $auth, 'https://mautic.yourcompany.com/api/');
// リード(コンタクト)を作成
$contact = $contactApi->create([
'firstname' => 'John',
'lastname' => 'Doe',
'email' => 'john@example.com',
'company' => 'Acme Corp',
'ipAddress' => $_SERVER['REMOTE_ADDR'],
'tags' => ['prospect', 'enterprise'],
]);
echo "Created contact: " . $contact['contact']['id'];
機能比較表
| 比較項目 | Listmonk | Mautic | Postal |
|---|---|---|---|
| メールキャンペーン | ✅ | ✅ | ✅ |
| マーケティングオートメーション | ❌ | ✅ | ❌ |
| CRM・リード管理 | ❌ | ✅ | ❌ |
| 内蔵SMTPサーバー | ❌(外部SMTP) | ❌(外部SMTP) | ✅ |
| トランザクションメール | ✅(API) | ✅ | ✅ |
| 言語 | Go | PHP | Ruby |
| GitHub Stars | 15k+ | 7k+ | 14k+ |
メール配信の到達率を監視するにはDevOpsカテゴリ/categories/devopsのGrafanaでバウンス率・開封率をダッシュボード化するのが効果的です。マーケティングデータとCRMの統合にはMarketingカテゴリ/categories/marketingのRudderStackやPostHogと組み合わせてください。
FAQ
Q. Listmonkのメール配信にはどのSMTPサービスを使うべきですか?
A. 規模と予算によって異なります。小規模(月1万通以下): Amazon SES(月1,000通まで無料、以降$0.1/1,000通)が最安。設定: SESでSMTP認証情報を取得し、ListmonkのSMTP設定に入力するだけ。中規模(月1〜10万通): Amazon SES継続でもOK(月10万通で$10程度)。大規模(月10万通以上): Postalを自社でSMTPサーバーとして立てる。または専用IPのMailgun(月$35〜)で送信レピュテーションを維持。必ずSPF・DKIM・DMARCを設定してドメイン認証を行うことが重要です。
Q. Listmonkのキャンペーン送信をSlack通知に連携するには?
A. ListmonkはWebhookをサポートしています。管理画面 → Settings → Webhooks で送信完了・バウンス・購読解除イベントをWebhookで通知できます。Slack IncomingWebhookと組み合わせます。
# Slackに送信結果を通知するWebhookハンドラー(FastAPI)
from fastapi import FastAPI, Request
import httpx
app = FastAPI()
SLACK_WEBHOOK = "https://hooks.slack.com/services/YOUR_WEBHOOK"
@app.post("/webhooks/listmonk")
async def listmonk_webhook(request: Request):
data = await request.json()
event = data.get("event")
if event == "campaign_send_end":
sent = data.get("data", {}).get("sent", 0)
failed = data.get("data", {}).get("failed", 0)
campaign = data.get("data", {}).get("campaign", {}).get("name", "")
await httpx.AsyncClient().post(SLACK_WEBHOOK, json={
"text": f"Campaign *{campaign}* completed: sent={sent}, failed={failed}"
})
return {"ok": True}
Q. MauticのメールキャンペーンでA/Bテストは可能ですか?
A. はい、MauticはネイティブでA/Bテスト(VariantテストとTranslatabilityテスト)をサポートしています。件名・本文・送信時刻の異なるバリアントを作成し、統計的に有意な差が出た時点で勝者バリアントを自動送信する設定が可能です。勝者の判定基準は開封率・クリック率・フォーム送信数から選べます。
Q. 購読解除(Unsubscribe)リストの管理はどうすればいいですか?
A. Listmonk・Mauticどちらも、メールに含まれる購読解除リンクをクリックすると自動でブロックリストに追加されます。GDPR対応として: ①購読解除リンクはすべてのキャンペーンメールに必ず含める(CAN-SPAM法・GDPR必須)②購読解除から10日以内にリストから削除(GDPR Article 17)③購読者が削除リクエストをした場合の個人情報完全削除フローを整備。ListmonkはGDPR削除APIを提供しており、DELETE /api/subscribers/{id}で購読者の全データを削除できます。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 高速メルマガ配信・シンプル運用 | Listmonk |
| HubSpot代替・マーケティングオートメーション | Mautic |
| 自社SMTPサーバー・トランザクションメール | Postal |