自前のサーバーでニュースレターの配信・購読者管理・自動キャンペーンを運用できるオープンソースのメール配信アプリケーション。
・企業:購読者数や送信数に応じた従量課金を避け、社内サーバーで顧客データを完全に管理しながら大規模なメールマーケティングを運用できる。 ・スタートアップ:内蔵のメール配信エンジン(Zone-MTA)により外部サービス不要でメール送信基盤を構築でき、初期コストを大幅に削減できる。 ・個人事業主・フリーランス:MJMLテンプレートや自動配信(トリガー・RSSキャンペーン)を無料で利用でき、少人数でもプロ品質のニュースレター運用が可能になる。
MailchimpやSendGridは購読者数や送信数に応じて月額料金が増加するが、Mailtrainはセルフホストのため購読者数・送信数ともに無制限で、購読者データの外部預託も不要になる。
Mailtrain v2
Mailtrainは、Node.js(v14以上)とMySQL(v8以上)またはMariaDB(v10以上)で構築されたセルフホスト型ニュースレターアプリケーションです。
これはMailtrainのバージョン2です。v1のほぼすべての機能を実装し、さらにいくつかの機能を追加しています。完全な書き直しのため、一からインストールする必要があります。
Mailtrain v1からアップグレードする場合は、DBをバックアップしてMailtrain v2で使用してください。Mailtrain v2はDBを新しいスキーマにアップグレードできるはずです。

機能
- 購読者リスト管理
- リストのセグメンテーション
- カスタムフィールド
- メールテンプレート(MJMLベースのテンプレートを含む)
- カスタムレポート
- 自動配信(トリガーおよびRSSキャンペーン)
- 細かいユーザー権限と柔軟な共有機能を持つ複数ユーザー対応
- エンタープライズレベルの状況に対応する階層型名前空間
- メール配信のセットアップをほぼゼロにする組み込みZone-MTA(https://github.com/zone-eu/zone-mta)
推奨最小ハードウェア要件
- 2 vCPU
- 4096 MB RAM
クイックスタート
準備
Mailtrainは3つのURLエンドポイントを作成します。これらは「trusted」「sandbox」「public」と呼ばれます。これにより、Mailtrainはマルチユーザー環境でのセキュリティを保証し、XSS攻撃を回避できます。3つのエンドポイントの機能は以下の通りです:
- trusted - ログインユーザーがリストの管理、キャンペーンの送信などに使用するメインのUIエンドポイントです。
- sandbox - ユーザーに直接表示されないエンドポイントです。WYSIWYGテンプレートエディタのホスティングに使用されます。
- public - 購読者向けのエンドポイントです。購読管理フォーム、ファイル、アーカイブのホスティングに使用されます。
Mailtrainの推奨デプロイメントでは、すべて同じIPアドレスを指す3つのDNSエントリを使用します。例えば以下のようになります:
- lists.example.com - publicエンドポイント(
example.comドメイン下のAレコードlists) - mailtrain.example.com - trustedエンドポイント(
example.comドメイン下のCNAMEレコードmailtrainでlistsを指す) - sbox-mailtrain.example.com - sandboxエンドポイント(
example.comドメイン下のCNAMEレコードsbox-mailtrainでlistsを指す)
CentOS 7またはUbuntu 18.04 LTSへの新規インストール(SSLで保護された公開ウェブサイト)
これは公開アクセス可能なMailtrainインスタンスをセットアップします。すべてのエンドポイント(trusted、sandbox、public)はHTTP(ポート80)とHTTPS(ポート443)の両方を提供します。HTTPポートはHTTPSへのリダイレクトのみを行います。
以下のスクリプトはLet's Encryptから有効な証明書を取得します。 AWSや他のクラウドプロバイダーでMailtrainをホスティングしている場合は、インストールスクリプトを実行する前に、ポート80(HTTP)と443(HTTPS)への受信接続を許可してください。
注意: これにより、Let's Encryptの利用規約に自動的に同意することになります。 したがって、以下のスクリプトを実行することで、Let's Encryptの利用規約(https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf)に同意したことになります。
-
rootとしてログインします。(AWS上のCentOS 7でrootとしてnpmを実行する際に問題が発生しました。
sudo内の一見余分なsuで解決するようです。)sudo su - -
GITをインストール
CentOS 7の場合:
yum install -y gitUbuntu 18.04 LTSの場合:
apt-get install -y git -
gitを使用してMailtrainを
/opt/mailtrainディレクトリにダウンロードcd /opt git clone https://github.com/Mailtrain-org/mailtrain.git cd mailtrain git checkout v2 -
インストールスクリプトを実行します。URLとメールアドレスを正しい値に置き換えてください。注意: このスクリプトを実行すると、Let's Encryptの条件に同意したことになります。
CentOS 7の場合:
bash setup/install-centos7-https.sh mailtrain.example.com sbox-mailtrain.example.com lists.example.com admin@example.comUbuntu 18.04 LTSの場合:
bash setup/install-ubuntu1804-https.sh mailtrain.example.com sbox-mailtrain.example.com lists.example.com admin@example.com -
Mailtrainを起動し、サーバー起動時にデフォルトで開始されるように設定します。
systemctl start mailtrain systemctl enable mailtrain -
trustedエンドポイント(例:
https://mailtrain.example.com)を開きます -
admin:testで認証します -
admin/アカウントでパスワードを更新します
-
管理/グローバル設定で設定を更新します
-
DKIMでメールに署名する場合は、管理/送信設定でDKIMキーとDKIMセレクタを設定します。
CentOS 7またはUbuntu 18.04 LTSへの新規インストール(ローカルインストール)
これはローカルアクセス可能なMailtrainインスタンスをセットアップします(主に開発とテスト用)。 すべてのエンドポイント(trusted、sandbox、public)は以下のようにHTTPのみを提供します:
- http://localhost:3000 - trustedエンドポイント
- http://localhost:3003 - sandboxエンドポイント
- http://localhost:3004 - publicエンドポイント
-
rootとしてログインします。(AWS上のCentOS 7でrootとしてnpmを実行する際に問題が発生しました。
sudo内の一見余分なsuで解決するようです。)sudo su - -
gitをインストール
CentOS 7の場合:
yum install -y gitUbuntu 18.04 LTSの場合:
apt-get install -y git -
gitを使用してMailtrainを
/opt/mailtrainディレクトリにダウンロードcd /opt git clone https://github.com/Mailtrain-org/mailtrain.git cd mailtrain git checkout v2 -
インストールスクリプトを実行します。URLとメールアドレスを正しい値に置き換えてください。注意: このスクリプトを実行すると、Let's Encryptの条件に同意したことになります。
CentOS 7の場合:
bash setup/install-centos7-local.shUbuntu 18.04 LTSの場合:
bash setup/install-ubuntu1804-local.sh -
Mailtrainを起動し、サーバー起動時にデフォルトで開始されるように設定します。
systemctl start mailtrain systemctl enable mailtrain -
trustedエンドポイント http://localhost:3000 を開きます
-
admin:testで認証します
DockerとDocker Composeによるデプロイ
このセットアップでは、Mailtrain、MongoDB、Redis、MariaDBで構成されるスタックを起動します。以下のHTTPエンドポイントでローカルアクセス可能なMailtrainインスタンスをセットアップします。
- http://localhost:3000 - trustedエンドポイント
- http://localhost:3003 - sandboxエンドポイント
- http://localhost:3004 - publicエンドポイント
これを公開アクセス可能にするには、これらのエンドポイントをHTTPS経由で公開するリバースプロキシを追加する必要があります。プロキシを使用する場合は、以下に示すようにMAILTRAIN_SETTING経由でURLベースと--withProxyパラメータも設定する必要があります。
そのようなプロキシの例:
- http://localhost:3000 -> https://mailtrain.example.com
- http://localhost:3003 -> https://sbox-mailtrain.example.com
- http://localhost:3004 -> https://lists.example.com
DockerでMailtrainをデプロイするには、以下の2つの依存関係がインストールされている必要があります:
docker-composeでMailtrainを起動する手順:
-
Mailtrainのdocker-composeビルドファイルをダウンロード
curl -O https://raw.githubusercontent.com/Mailtrain-org/mailtrain/v2/docker-compose.yml -
docker-composeでMailtrainをデプロイ(
docker-compose.ymlファイルをダウンロードしたディレクトリで実行)。初回実行時はかなり時間がかかります。以降の実行は高速です。docker-compose up -
trustedエンドポイント http://localhost:3000 を開きます
-
admin:testで認証します
上記の手順では、DockerHub(https://hub.docker.com/r/mailtrain/mailtrain)で自動ビルドされたDockerイメージを使用します。Dockerイメージを自分でビルドしたい場合(例:開発時)は、プロジェクトのルートディレクトリにある`docker-compose-local.yml`を使用してください。
DockerとDocker Composeによるデプロイ(開発用)
このセットアップでは上記と同様のスタックを起動しますが、Dockerコンテナを使用したローカル開発用に調整されています。
-
このリポジトリをクローン
-
開発スタックを起動
docker-compose -f docker-compose-develop.yml up -d -
コンテナ内のシェルに接続
docker-compose exec mailtrain bash -
すべてのNodeモジュールをインストールし、クライアントWebアプリをビルドするために、以下のコマンドを一度実行
cd /app bash setup/reinstall-modules.sh cd /app/client && npm run build && cd /app -
初回起動時に以下のコマンドでサーバーを起動し、
server/config/production.yamlを生成bash docker-entrypoint.sh
Docker環境変数
Dockerを使用する場合、以下の環境変数でデフォルトのMailtrain設定を上書きできます。これらの変数はdocker-compose設定ファイルで定義する必要があります。docker-compose.yml設定ファイルで直接値を指定できます。
あるいは、値を空のままにして宣言するだけでもかまいません(https://docs.docker.com/compose/environment-variables/#pass-environment-variables-to-containers を参照)。その場合、値は.envファイルまたは環境変数(例:URL_BASE_TRUSTED=https://mailtrain.domain.com (and more env-vars..) docker-compose -f docker-compose.yml build (or up))で提供できます。
!!!警告!!! 必ずADMIN_PASSWORDを設定してください。設定しないと、デフォルトパスワードがtestのままとなり、インスタンスが脆弱になります!
| パラメータ | 説明 |
|---|---|
| ADMIN_PASSWORD | 管理者パスワードを設定。管理者ユーザー名は変更可能ですが、パスワードは常にこの値で上書きされます。デフォルトがtestのため必ず設定してください |
| ADMIN_ACCESS_TOKEN | API用のアクセストークンを設定(オプション) |
| PORT_TRUSTED | インスタンスのtrustedポートを設定(デフォルト:3000) |
| PORT_SANDBOX | インスタンスのsandboxポートを設定(デフォルト:3003) |
| PORT_PUBLIC | インスタンスのpublicポートを設定(デフォルト:3004) |
| URL_BASE_TRUSTED | インスタンスの外部trusted URLを設定(デフォルト:http://localhost:3000)、例:https://mailtrain.example.com |
| URL_BASE_SANDBOX | インスタンスの外部sandbox URLを設定(デフォルト:http://localhost:3003)、例:https://sbox-mailtrain.example.com |
| URL_BASE_PUBLIC | インスタンスの外部public URLを設定(デフォルト:http://localhost:3004)、例:https://lists.example.com |
| WWW_HOST | サーバーがバインドするアドレスを設定(デフォルト:0.0.0.0) |
| WWW_PROXY | Mailtrainがhttpリバースプロキシの背後にある場合に使用(デフォルト:false) |
| WWW_SECRET | expressセッションのシークレットを設定(デフォルト:$(pwgen -1)) |
| MONGO_HOST | mongoホストを設定(デフォルト:mongo) |
| WITH_REDIS | redisの有効/無効を設定(デフォルト:true) |
| REDIS_HOST | redisホストを設定(デフォルト:redis) |
| REDIS_PORT | redisポートを設定(デフォルト:6379) |
| MYSQL_HOST | mysqlホストを設定(デフォルト:mysql) |
| MYSQL_PORT | mysqlポートを設定(デフォルト:3306) |
| MYSQL_DATABASE | mysqlデータベースを設定(デフォルト:mailtrain) |
| MYSQL_USER | mysqlユーザーを設定(デフォルト:mailtrain) |
| MYSQL_PASSWORD | mysqlパスワードを設定(デフォルト:mailtrain) |
| WITH_LDAP | LDAP認証を有効にする場合に使用 |
| LDAP_HOST | 認証用LDAPホスト(デフォルト:ldap) |
| LDAP_PORT | LDAPポート(デフォルト:389) |
| LDAP_SECURE | ldapsプロトコルでLDAPを使用する場合に使用 |
| LDAP_BIND_USER | LDAP接続用ユーザー |
| LDAP_BIND_PASS | LDAP接続用パスワード |
| LDAP_FILTER | LDAPフィルター |
| LDAP_BASEDN | LDAPベースDN |
| LDAP_UIDTAG | LDAP UIDタグ(例:uid/cn/username) |
| WITH_ZONE_MTA | 組み込みZone-MTAの有効/無効を設定(デフォルト:true) |
| POOL_NAME | 組み込みZone-MTAのプール名を設定(デフォルト:os.hostname()) |
| WITH_CAS | CASを使用する場合に使用 |
| CAS_URL | CASベースURL |
| CAS_NAMETAG | 名前の保存に使用するフィールド(デフォルト:username) |
| CAS_MAILTAG | メールの保存に使用するフィールド(デフォルト:mail) |
| CAS_NEWUSERROLE | 新規ユーザーのロール(デフォルト:nobody) |
| CAS_NEWUSERNAMESPACEID | 新規ユーザーの名前空間ID(デフォルト:1) |
| LOG_LEVEL | ログレベルを設定:`silly |
| DEFAULT_LANGUAGE | デフォルト言語を設定(デフォルト:en-US) |
| WITH_POSTFIXBOUNCE | PostfixBounce TCPリスナーの有効/無効を設定(デフォルト:false) |
| POSTFIXBOUNCE_PORT | PostfixBounceリスニングTCPポートを設定(デフォルト:5699) |
| POSTFIXBOUNCE_HOST | PostfixBounceリスニングホストを設定(デフォルト:127.0.0.1) |
元のdocker-compose.ymlを変更したくない場合は、以下のように別のファイル(例:docker-compose.override.yml)にオーバーライドを配置できます。
version: '3'
services:
mailtrain:
environment:
- URL_BASE_TRUSTED
- URL_BASE_SANDBOX
- URL_BASE_PUBLIC
ライセンス
GPL-V3.0