aaPanel/BillionMail
主な特徴
- **完全オープンソース**: 隠れたコストやベンダーロックインなし
- **高度な分析機能**: メール配信、開封率、クリックスルー率などを追跡
- **無制限の送信**: 送信可能なメール数に制限なし
- **カスタマイズ可能なテンプレート**: プロフェッショナルなマーケティングテンプレートを再利用可能
- **プライバシー優先**: データは自分の管理下に、サードパーティの追跡なし
- **セルフホスト型**: 完全な制御のため自分のサーバーで実行
- **WebMail統合**: RoundCubeを統合、WebMail機能も提供
- **Dockerベース**: 簡単なデプロイと管理
- **マルチコンテナアーキテクチャ**: Postfix、Dovecot、rspamd、PostgreSQL、Redis等を統合
リポジトリ解析: aaPanel/BillionMail
基本情報
- リポジトリ名: aaPanel/BillionMail
- 主要言語: Go
- スター数: 8,004
- フォーク数: GitHubから取得可能
- 最終更新: 高頻度に更新中
- ライセンス: AGPLv3 License
- トピックス: Email Marketing、MailServer、NewsLetter、Open Source、Self-hosted、Email Campaign
概要
一言で言うと
BillionMailは、ビジネスや個人がメールキャンペーンを簡単に管理できるよう設計されたオープンソースのメールサーバー兼メールマーケティングプラットフォームです。
詳細説明
BillionMailは、ニュースレター、プロモーションメール、トランザクションメッセージなどを送信するための包括的なソリューションで、メールマーケティングの完全な制御を提供します。「Billion emails. Any business. Guaranteed.」というスローガンの下、大量のメール送信をシンプルに実現することを目指しています。インストールからメール送信までわずか8分で完了するという手軽さも特徴で、高価なクローズドソースの代替として開発されました。
主な特徴
- 完全オープンソース: 隠れたコストやベンダーロックインなし
- 高度な分析機能: メール配信、開封率、クリックスルー率などを追跡
- 無制限の送信: 送信可能なメール数に制限なし
- カスタマイズ可能なテンプレート: プロフェッショナルなマーケティングテンプレートを再利用可能
- プライバシー優先: データは自分の管理下に、サードパーティの追跡なし
- セルフホスト型: 完全な制御のため自分のサーバーで実行
- WebMail統合: RoundCubeを統合、WebMail機能も提供
- Dockerベース: 簡単なデプロイと管理
- マルチコンテナアーキテクチャ: Postfix、Dovecot、rspamd、PostgreSQL、Redis等を統合
使用方法
インストール
前提条件
- Linuxサーバー(Ubuntu/Debian/CentOS推奨)
- Git
- Docker または Docker Compose(自動インストールスクリプトあり)
- 最小2GB RAM(推奨4GB以上)
- ドメイン名(メール送信用)
- ポート開放: 25, 80, 110, 143, 443, 465, 587, 993, 995
インストール手順
# 方法1: ワンクリックインストール(推奨)
cd /opt && git clone https://github.com/aaPanel/BillionMail && cd BillionMail && bash install.sh
# 方法2: Docker Composeを使用(Dockerインストール済みの場合)
cd /opt && git clone https://github.com/aaPanel/BillionMail && cd BillionMail && cp env_init .env && docker compose up -d || docker-compose up -d
# 方法3: aaPanelでのワンクリックインストール
# aaPanelにログイン → Docker → OneClick install
基本的な使い方
Hello World相当の例
# 3ステップでメール送信
# ステップ1: BillionMailをインストール
cd /opt && git clone https://github.com/aaPanel/BillionMail && cd BillionMail && bash install.sh
# ステップ2: ドメインを接続
# Web UIから送信ドメインを追加
# DNSレコードを検証
# 無料SSLを自動有効化
# ステップ3: キャンペーンを作成
# メールを作成または貼り付け
# リストとタグを選択
# 送信時刻を設定またはすぐに送信
実践的な使用例
# 管理コマンド
# デフォルトログイン情報を表示
bm default
# DNSレコードを表示
bm show-record
# BillionMailを更新
bm update
# ヘルプを表示
bm help
高度な使い方
// APIを使用したメール送信
// POST /api/mail/send
{
"to": "recipient@example.com",
"subject": "Welcome to BillionMail",
"body": "<h1>Hello World</h1><p>This is a test email from BillionMail API.</p>",
"from": "sender@yourdomain.com",
"reply_to": "support@yourdomain.com",
"headers": {
"X-Campaign-ID": "welcome-campaign-001"
},
"attachments": [
{
"filename": "welcome.pdf",
"content": "base64_encoded_content",
"type": "application/pdf"
}
],
"tags": ["welcome", "new-user"],
"metadata": {
"user_id": "12345",
"signup_date": "2024-01-01"
}
}
// Go SDKを使用したバッチ送信
package main
import (
"fmt"
"billionmail/sdk"
)
func main() {
client := sdk.NewClient("your-api-key")
// テンプレートを作成
template := &sdk.EmailTemplate{
Name: "monthly-newsletter",
Subject: "{{company}} Monthly Newsletter - {{month}}",
HTML: "<h1>Hello {{name}}</h1>...",
Text: "Hello {{name}}...",
}
// バッチタスクを作成
task := &sdk.BatchTask{
TemplateID: template.ID,
RecipientList: "subscribers-2024",
Variables: map[string]string{
"company": "Acme Corp",
"month": "January",
},
SendRate: 1000, // 1000 emails/hour
}
// 送信開始
result, err := client.BatchMail.CreateTask(task)
if err != nil {
panic(err)
}
fmt.Printf("Task created: %s\n", result.TaskID)
}
ドキュメント・リソース
公式ドキュメント
- README.md: プロジェクト概要、クイックスタート、インストール方法
- README-zh_CN.md: 中国語ドキュメント
- README-ja.md: 日本語ドキュメント
- 公式サイト: https://www.billionmail.com/
- YouTubeチュートリアル: インストールから使用方法までの動画ガイド
サンプル・デモ
- ライブデモ: https://demo.billionmail.com/billionmail (ユーザー名: billionmail, パスワード: billionmail)
- data/example_recipients.txt: サンプル受信者リスト
- template/: デフォルトメールテンプレート(ウェルカムメール、確認メール等)
チュートリアル・ガイド
- 管理コマンド:
bm helpで利用可能なコマンド一覧 - Dockerインストールガイド: Dockerとdocker-composeプラグインの設定方法
- APIドキュメント: プログラマティックなメール送信、バッチ処理
- GitHub Issues: 問題報告や機能リクエスト
技術的詳細
アーキテクチャ
全体構造
BillionMailはマイクロサービスアーキテクチャを採用し、Dockerコンテナで各コンポーネントを分離しています。コアのアプリケーションはGo言語で開発され、GoFrame (gf) フレームワークを使用しています。メールサーバー機能はPostfix(SMTP)、Dovecot(IMAP/POP3)、rspamd(スパムフィルター)で構成され、データストアにはPostgreSQLとRedisを使用しています。
ディレクトリ構成
BillionMail/
├── core/ # Goバックエンドアプリケーション
│ ├── api/ # REST APIエンドポイント
│ ├── frontend/ # Vue.jsフロントエンド
│ ├── internal/ # 内部ロジック
│ │ ├── controller/ # HTTPコントローラー
│ │ ├── service/ # ビジネスロジック
│ │ └── model/ # データモデル
│ └── languages/ # i18nファイル
├── Dockerfiles/ # 各コンポーネントのDockerfile
│ ├── core/ # コアアプリケーション
│ ├── dovecot/ # IMAP/POP3サーバー
│ ├── postfix/ # SMTPサーバー
│ └── rspamd/ # スパムフィルター
├── conf/ # 各サービスの設定ファイル
├── data/ # サンプルデータ
└── template/ # メールテンプレート
主要コンポーネント
-
Core Service: Goで作られたメインアプリケーション
- 場所:
core/ - 依存: PostgreSQL, Redis, Docker API
- インターフェース: REST API, Web UI
- 場所:
-
Postfix: SMTPサーバー
- 場所:
Dockerfiles/postfix/ - 依存: PostgreSQL(ユーザー情報)
- インターフェース: SMTP (25/465/587)
- 場所:
-
Dovecot: IMAP/POP3サーバー
- 場所:
Dockerfiles/dovecot/ - 依存: PostgreSQL, Redis
- インターフェース: IMAP (143/993), POP3 (110/995)
- 場所:
-
rspamd: スパムフィルター
- 場所:
Dockerfiles/rspamd/ - 依存: Redis
- インターフェース: Milterプロトコル
- 場所:
技術スタック
コア技術
- 言語:
- Go 1.22(バックエンド)- 高性能、並行処理
- TypeScript/Vue.js(フロントエンド)
- Bash(インストールスクリプト)
- フレームワーク:
- GoFrame (gf) v2.9.0: Webフレームワーク
- Vue.js: リアクティブUI
- Element UI: UIコンポーネントライブラリ
- 主要ライブラリ:
- go-acme/lego (v4.22.2): Let's Encrypt SSL証明書自動取得
- docker/docker (v28.0.2): Docker API統合
- golang-jwt/jwt (v5.2.1): JWT認証
- sashabaranov/go-openai (v1.40.5): AI機能統合
- xuri/excelize (v2.9.0): Excelファイル処理
開発・運用ツール
- ビルドツール:
- Go Modules(go.mod)
- npm/pnpm(フロントエンド)
- Dockerマルチステージビルド
- Make(ビルド自動化)
- テスト:
- Go標準テストフレームワーク
- ユニットテスト、統合テスト
- CI/CD:
- GitHub Actions対応
- Dockerイメージ自動ビルド
- デプロイ:
- Docker Compose
- ワンクリックインストールスクリプト
- aaPanel統合
設計パターン・手法
- マイクロサービスアーキテクチャ: Dockerコンテナで各サービスを分離
- MVCパターン: GoFrameフレームワークにMVC構造
- リポジトリパターン: データアクセスの抽象化
- JWT認証: ステートレスAPI認証
- ファクトリーパターン: コントローラーの生成
データフロー・処理フロー
-
メール送信フロー:
- API/UIから送信リクエスト受信
- JWTトークン検証
- メールコンテンツとメタデータをPostgreSQLに保存
- Redisキューにタスク追加
- バックグラウンドワーカーがキューから取得
- Postfix SMTPサーバー経由で送信
- rspamdでスパムチェック
-
メール受信フロー:
- SMTP/IMAP/POP3プロトコルで受信
- Postfixがメールを受け取り
- rspamdでスパムフィルタリング
- Dovecotがメールを保存
- ユーザーがWebMail/IMAPクライアントでアクセス
-
バッチ送信フロー:
- CSV/Excelファイルから受信者リストインポート
- テンプレート選択、変数展開
- 送信レート制御(時間あたりの送信数制限)
- 並列処理で高速送信
- リアルタイム統計更新
API・インターフェース
公開API
メール送信API
- 目的: 単一/バッチメール送信
- エンドポイント:
/api/v1/mail/send- 単一メール送信/api/v1/mail/batch- バッチ送信/api/v1/templates- テンプレート管理/api/v1/contacts- 連絡先管理
ドメイン管理API
- 目的: 送信ドメインの設定とSSL証明書管理
- 使用例:
# ドメイン追加
curl -X POST http://localhost/api/v1/domains \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{"domain": "example.com"}'
# SSL証明書自動取得
curl -X POST http://localhost/api/v1/domains/example.com/ssl/apply \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
設定・カスタマイズ
設定ファイル
# .env - 主要な環境変数
TZ=Asia/Tokyo # タイムゾーン
DBNAME=billionmail # PostgreSQLデータベース名
DBUSER=billionmail # PostgreSQLユーザー名
DBPASS=your_secure_password # PostgreSQLパスワード
REDISPASS=your_redis_password # Redisパスワード
BILLIONMAIL_HOSTNAME=mail.example.com # メールサーバーホスト名
# ポート設定
HTTP_PORT=80
HTTPS_PORT=443
SMTP_PORT=25
SMTPS_PORT=465
SUBMISSION_PORT=587
IMAP_PORT=143
IMAPS_PORT=993
POP_PORT=110
POPS_PORT=995
拡張・プラグイン開発
- AI統合: OpenAI APIを使用したメールコンテンツ生成
- カスタムテンプレート: HTML/テキストテンプレートの作成
- Webhook: イベント通知(送信成功、バウンス、クリック等)
- SMTPリレー: 外部SMTPサーバー経由の送信
パフォーマンス・スケーラビリティ
パフォーマンス特性
- 送信速度: レート制御により最大数千件/分の送信が可能
- 並列処理: Goのgoroutineとantsプールによる効率的な並列処理
- 最適化手法:
- Redisキューによる非同期処理
- PostgreSQL接続プーリング
- Dockerコンテナ分離によるリソース最適化
- Goの高性能ランタイム
スケーラビリティ
- 水平スケーリング: Docker Swarm/Kubernetesでのコンテナスケーリング
- 垂直スケーリング: CPU/メモリ追加でパフォーマンス向上
- データベース: PostgreSQLのレプリケーション対応
- キャッシュ: Redisクラスタ対応
制限事項
- 技術的な制限:
- 大量の添付ファイルはメモリ使用量に影響
- 同時接続数はPostgreSQL設定に依存
- WebSocketは未実装(リアルタイム更新はHTTPポーリング)
- 運用上の制限:
- 多数のポート開放が必要
- SPF/DKIM/DMARC設定が必須
- IPレピュテーション管理が重要
評価・所感
技術的評価
強み
- 真のオールインワン: メールサーバーとマーケティング機能の完全統合
- 簡単なインストール: 8分でインストールから送信まで完了
- コスト効率: オープンソースで無料、無制限送信
- Dockerベース: モダンなコンテナアーキテクチャ
- SSL自動化: Let's Encryptで無料SSL証明書自動取得
- 多言語対応: 英語、中国語、日本語に対応
- Go言語での実装: 高性能、低リソース消費
改善の余地
- ドキュメント: 詳細なAPIドキュメントが不足
- バックアップ/リストア: バックアップ機能が限定的
- モニタリング: Prometheus/Grafana統合などが未実装
- クラスタリング: Kubernetesネイティブ対応が不完全
向いている用途
- 中小企業のメールマーケティング: コスト効率的なソリューション
- ニュースレター配信: 定期的なメール配信
- トランザクションメール: 注文確認、パスワードリセット等
- セルフホストメールサーバー: 完全なコントロールが必要な組織
- スタートアップ: 低コストでメールマーケティングを始めたい企業
向いていない用途
- 大企業の基幹システム: エンタープライズ機能が不足
- リアルタイム通信: WebSocket未実装
- 複雑なワークフロー: 高度な自動化機能が限定的
- コンプライアンス重視: 監査ログ、詳細なアクセス制御が不足
総評
BillionMailは、「メールマーケティングの民主化」を目指す野心的なプロジェクトで、特に中小企業やスタートアップにとって非常に魅力的なソリューションです。ワンクリックインストールとシンプルな使い勝手は、技術的な障壁を大幅に下げています。
技術的には、Go言語とDockerを活用したモダンなアーキテクチャが印象的で、Postfix/Dovecotといった成熟したメールサーバー技術と最新のウェブ技術をうまく統合しています。AGPLv3ライセンスによる完全なオープンソース化は、ベンダーロックインを避けたい組織にとって大きなメリットです。
ただし、エンタープライズ向け機能(詳細な監査ログ、高度なワークフロー自動化、HA構成等)はまだ発展途上であり、大規模組織での利用には追加開発が必要でしょう。それでも、「十億通のメールを送る」という大胆な目標を掲げ、コミュニティ主導で急速に成長しているプロジェクトとして、今後の発展が大いに期待されます。