aaPanel/BillionMail

⭐ 8,004 🍴 0 Go📄 AGPLv3 License GitHubで見る →

主な特徴

  • **完全オープンソース**: 隠れたコストやベンダーロックインなし
  • **高度な分析機能**: メール配信、開封率、クリックスルー率などを追跡
  • **無制限の送信**: 送信可能なメール数に制限なし
  • **カスタマイズ可能なテンプレート**: プロフェッショナルなマーケティングテンプレートを再利用可能
  • **プライバシー優先**: データは自分の管理下に、サードパーティの追跡なし
  • **セルフホスト型**: 完全な制御のため自分のサーバーで実行
  • **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認証
  • ファクトリーパターン: コントローラーの生成

データフロー・処理フロー

  1. メール送信フロー:

    • API/UIから送信リクエスト受信
    • JWTトークン検証
    • メールコンテンツとメタデータをPostgreSQLに保存
    • Redisキューにタスク追加
    • バックグラウンドワーカーがキューから取得
    • Postfix SMTPサーバー経由で送信
    • rspamdでスパムチェック
  2. メール受信フロー:

    • SMTP/IMAP/POP3プロトコルで受信
    • Postfixがメールを受け取り
    • rspamdでスパムフィルタリング
    • Dovecotがメールを保存
    • ユーザーがWebMail/IMAPクライアントでアクセス
  3. バッチ送信フロー:

    • 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構成等)はまだ発展途上であり、大規模組織での利用には追加開発が必要でしょう。それでも、「十億通のメールを送る」という大胆な目標を掲げ、コミュニティ主導で急速に成長しているプロジェクトとして、今後の発展が大いに期待されます。