このチュートリアルでは、Ubuntu16.04サーバーにMailtrainをインストールする方法を説明します。 Mailtrainは、オープンソースのセルフホストニュースレターアプリであり、Mailchimpのような商用メールサービスプロバイダーに代わるものです。 Mailtrainを使用して、独自のメールサーバーを介して、またはSMTPリレーサービス(Mailjet、SendGrid、AmazonSES、Mailgunなど)を使用して、メールサブスクライバーにメールを送信できます。
Mailtrainは、Node.jsおよびMySQL/MariaDB上に構築されたGPLv3.0ライセンスの条件の下でリリースされます。最新バージョンはv1.24.1で、2018年9月28日にリリースされました。Mailtrainの機能は次のとおりです。
- 大規模なメーリングリスト(100万人の加入者など)を簡単に管理できます。
- APIを使用して手動でサブスクライバーを追加するか、CSVファイルからインポートできます。
- カスタムフィールド(テキストフィールド、数値、ドロップダウン、またはチェックボックス)、マージタグ、カスタムフォームをサポートしています。
- リストのセグメンテーション。
- RSSキャンペーン:RSSフィードからニュースレターを自動生成し、購読者に送信します。
- サブスクライバーはGPG公開鍵をアップロードでき、Mailtrainはニュースレターを暗号化します。
- すべてのリンクの個々のクリック統計を確認できます。
- 高度なメールテンプレートエディタとHTMLコードエディタ。
- 自動化:ユーザーが事前定義されたトリガーをアクティブにしたときに特定のメールを送信します。
- オープンメーリングリスト(公開サブスクリプションを許可)とクローズドメーリングリスト(サブスクライバーは管理者によってリストに追加されます)を作成できます。
Ubuntu16.04サーバーにMailtrainをインストールするための前提条件
Mailtrainを実行するには、少なくとも1GBのRAMを搭載したサーバーが必要です。この特別なリンクをクリックすると、DigitalOceanで100ドルの無料クレジットを獲得できます。 (新規ユーザーのみ)。すでにDigitalOceanユーザーである場合は、この特別なリンクをクリックして、Vultrで$ 50の無料クレジットを取得できます(新規ユーザーのみ)。 DigitalOceanまたはVultrでアカウントを取得したら、サーバーにUbuntu 16.04をインストールし、以下の手順に従います。
ドメイン名も必要です。ドメイン名をNameCheapから登録しました。これは、価格が低く、whoisのプライバシー保護が無料で提供されるためです。
ステップ1:MariaDBデータベースサーバーをインストールする
サブスクライバーデータはデータベースに保存されます。 MailtrainはMySQLとMariaDBをサポートしています。 MariaDBは、MySQLのドロップイン代替品です。これは、OracleがMySQLをクローズドソース製品に変える可能性があることを懸念しているMySQLチームの元メンバーによって開発されました。それでは、MariaDBデータベースサーバーをインストールしましょう。
次のコマンドを入力して、Ubuntu16.04にインストールします。
sudo apt install mariadb-server mariadb-client
インストール後、MariaDBサーバーは自動的に開始されます。 systemctlを使用します ステータスを確認します。
systemctl status mysql
サンプル出力:
●mariadb.service-MariaDB10.1.34データベースサーバーロード済み:ロード済み(/lib/systemd/system/mariadb.service;有効;ベンダープリセット:有効)アクティブ:アクティブ(実行中)2018年9月8日土曜日以降11 :13:27 UTC; 21秒前ドキュメント:man:mysqld(8)https://mariadb.com/kb/en/library/systemd/メインPID:3473(mysqld)ステータス:「SQLリクエストを今すぐ取得しています...」タスク:27(制限:505)CGroup:/system.slice/mariadb.service└─3473/ usr / sbin / mysqld
実行されていない場合は、次のコマンドで開始します:
sudo systemctl start mysql
MariaDBがシステムの起動時に自動的に起動できるようにするには、
を実行します。sudo systemctl enable mysql
次に、インストール後のセキュリティスクリプトを実行します。
sudo mysql_secure_installation
MariaDBのrootパスワードの入力を求められたら、rootパスワードがまだ設定されていないため、Enterキーを押します。次に、y
と入力します MariaDBサーバーのルートパスワードを設定します。
次に、Enterキーを押して残りのすべての質問に答えることができます。これにより、匿名ユーザーが削除され、リモートrootログインが無効になり、テストデータベースが削除されます。このステップは、MariaDBデータベースセキュリティの基本的な要件です。 (文字Y
大文字で表示されます。これは、デフォルトの回答であることを意味します。)
ステップ2:Mailtrainのデータベースとユーザーを作成する
次に、MariaDBコンソールにログインして、Mailtrainのデータベースとユーザーを作成する必要があります。デフォルトでは、UbuntuのMaraiDBパッケージは unix_socketを使用します ユーザーログインを認証します。これは基本的に、OSのユーザー名とパスワードを使用してMariaDBコンソールにログインできることを意味します。したがって、次のコマンドを実行して、MariaDBのrootパスワードを指定せずにログインできます。
sudo mysql -u root
次のコマンドを使用して、Mailtrainのデータベースを作成します。 mailtrain
という名前を付けました 、ただし、好きな名前を使用できます。 (セミコロンを省略しないでください。)
データベースメールトレインを作成します;
次に、以下のコマンドを入力してMailtrainのデータベースユーザーを作成し、mailtrainデータベースのすべての権限をユーザーに付与します。 mtuser
を置き換えます およびyour-password
ご希望のユーザー名とパスワードを使用してください。
mailtrain。*のすべての権限を'mtuser_password'で識別されるmtuser@localhostに付与します;
次に、mailtrainデータベースへの読み取り専用アクセス権を持つユーザーを作成します。このユーザーにmt_readonly
という名前を付けました 。
mailtrainでselectを付与します。*'mt_readonly_password'で識別されるmt_readonly@localhostに;
変更を有効にするために特権テーブルをフラッシュしてから、MariaDBコンソールを終了します。
フラッシュ特権;終了;
ステップ3:Node.jsをインストールする
MailtrainはNode.jsに基づいて構築されています。これは、人間が読めるJavaScriptコードをマシンコードに変換するJavaScriptランタイム環境です。したがって、Mailtrainを実行するには、Ubuntu16.04にNode.jsをインストールする必要があります。 MailtrainにはNode.js7以降が必要です。このチュートリアルでは、NodeSourceリポジトリからNode.js(V8.x)の現在のLTSリリースをインストールします。
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -sudo apt install -y nodejs
nodejs
パッケージにはnpm(Node.jsパッケージマネージャー)バイナリが含まれているため、個別にインストールする必要はありません。 Node.jsとnpmのバージョンを確認するには、
node -vnpm -v
出力:
npmからネイティブアドオンをコンパイルしてインストールするには、ビルドツールもインストールする必要があります:
sudo apt install -y build-essential
ステップ4:Mailtrainを実行する
/var/www/
に移動します GithubからMailtrainファイルをフェッチします。
cd / var / www / sudo git clone https://github.com/Mailtrain-org/mailtrain.git
次のコマンドを使用して、初期SQLデータをmailtrainデータベースにインポートします。 mtuser
のパスワードを入力する必要があります 。
mysql -u mtuser -p mailtrainProduction.toml構成ファイルを作成します。
sudo nano /var/www/mailtrain/config/production.tomlこのファイルでは、
/var/www/mailtrain/config/default.toml
のデフォルト構成を上書きする構成を追加できます。 ファイル。次の構成を追加するだけで済みます。user ="mailtrain" group ="mailtrain" [log] level ="error" [www] secret="これをランダムな文字に置き換えてください"[mysql]user ="mtuser" password ="mtuser_password" [queue]プロセス=5ファイルを保存して閉じます。次に、
mailtrain
を作成します mailtrainデーモンを実行するためのユーザーとグループ。このユーザーのパスワードを作成する必要がないため、通常のユーザーではなくシステムユーザーを作成することに注意してください。sudo adduser --system --group mailtrainレポートワーカーの構成ファイルを作成します。
sudo nano /var/www/mailtrain/workers/reports/config/production.toml次の構成を追加します。このレポートワーカーは、メールトレインデータベースへの読み取り専用アクセス権を持ちます。
[log] level ="error" [mysql] user ="mt_readonly" password ="mt_readonly_password"ファイルを保存して閉じます。次に、
/var/www/mailtrain/
の権限を変更します 。sudo chown mailtrain:mailtrain / var / www / mailtrain / -Rsudo chmod o-rwx / var / www / mailtrain / config /そして、必要なノードパッケージをインストールします。
cd / var / www / mailtrainsudo npm install --no-progress --production --unsafe-perm =truesystemdサービスユニットファイルを
/etc/systemd/system/
にコピーします ディレクトリ。sudo cp /var/www/mailtrain/setup/mailtrain.service / etc / systemd / system /このファイルを開きます。
sudo nano /etc/systemd/system/mailtrain.serviceMailtrainを
/var/www/mailtrain/
にダウンロードしたため ディレクトリなので、作業ディレクトリを/opt/mailtrain
から変更します。/var/www/mailtrain
へ 。このファイルを保存して閉じます。次に、mailtrain.service
を開始します 。sudo systemctl start mailtrain.serviceシステムの起動時に自動起動を有効にします。
sudo systemctl enable mailtrain.serviceステータスを確認してください。実行されていることを確認してください。出力にアクティブ化(自動再起動)と表示されている場合は、Mailtrainが開始するまでしばらく待ちます。
sudo systemctl status mailtrain.serviceMailtrainが実行されたので、ポート3000を介してMailtrainWebインターフェースにアクセスできます。
your-server-ip:3000
![]()
リバースプロキシの設定とHTTPSの有効化
Mailtrain Webインターフェースを使用する前に、それをNginxの背後に置き、HTTPSを有効にしましょう。次のコマンドを使用して、Ubuntu16.04にNginxWebサーバーをインストールします。
sudo apt install nginxこれで、例の
mailtrain-nginx.conf
をコピーできます。/etc/nginx/conf.d/
へのファイル ディレクトリ。sudo cp /var/www/mailtrain/setup/mailtrain-nginx.conf /etc/nginx/conf.d/このファイルを開きます。
sudo nano /etc/nginx/conf.d/mailtrain-nginx.conf次の行を見つけます。
server_name mailtrain.org www.mailtrain.org;
server_name
の値を変更しますnewsletter.your-domain.com
のような独自のドメイン名へのパラメータ 。このサブドメインのAレコードを作成することを忘れないでください。server_name newsletter.linuxbabe.com;ファイルを保存して閉じます。次に、Nginx構成をテストします。
sudo nginx -tテストが成功した場合は、変更を有効にするためにNginxをリロードします。
sudo systemctl reload nginxこれで、サブドメイン
newsletter.your-domain.com
を介してMailtrainWebインターフェースにアクセスできるようになります。 。次に、
/var/www/mailtrain/config/production.toml
を編集します ファイル。sudo nano /var/www/mailtrain/config/production.toml
[www]
で セクションに次の2行を追加して、mailtrainがNginxプロキシの背後にあることを示し、ローカルホストアドレスでのみリッスンするようにします。host ="127.0.0.1" proxy =trueファイルを保存して閉じます。次に、Mailtrainを再起動して、変更を有効にします。
sudo systemctl restart mailtrainLet'sEncryptを使用したHTTPSの有効化
Let’s Encryptクライアント(certbot)をUbuntu16.04サーバーにインストールします。
sudo apt install software-properties-commonsudo add-apt-repository ppa:certbot / certbotsudo aptupdatesudo apt install certbot python3-certbot-nginx次に、Nginxプラグインを使用して、次のコマンドを実行することにより、TLS証明書を自動的に取得してインストールできます。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email your-email-address -d newsletter.your-domain.com
![]()
これで、ドメイン名と安全なHTTPS接続を介してMailtrainWebインターフェースにアクセスできます。
![]()
ユーザー名
注:管理者アカウントは、ハッカーにとって簡単な標的です。最高のセキュリティを確保するために、ユーザー名をadmin
でログインします とパスワードtest
。次に、アカウントのメールアドレスとパスワードを変更します。settings
に移動します デフォルト設定を変更するページ。サービスアドレスをhttp://localhost:3000/
から変更する必要があります サブドメイン(https://newsletter.your-domain.com
。admin
から変更することをお勧めします 他の何かに。 Mailtrain Webインターフェースにはそのようなオプションはありませんが、SQLコマンドを使用してMariaDBデータベースのユーザー名を変更できます。
Mailer Settings
、独自のメールサーバーがある場合、またはAmazon SESを使用している場合は、SMTPを使用できます。実際には、SMTP
で他のSMTPリレーサービスを使用することもできます タブ。下のスクリーンショットでは、自分のメールサーバーを使用しています。メールはSTARTTLS暗号化を使用してポート587で送信されます。
![]()
設定を保存します。次に、Mailtrainの機能をテストするためのリストを作成できます。
メールトレインでバウンスメッセージを処理する方法
遅かれ早かれ、メーリングリストにはメールを送信できないアドレスが含まれるようになります。たとえば、会社の電子メールアドレスを使用する加入者が会社を辞めると、その電子メールアドレスは削除されます。そのため、メールサーバーはメールを配信できないことを示すバウンスメッセージを受信します。
SMTPリレーサービスを使用して電子メールを送信する場合、SMTPリレーサービスがバウンスメッセージを処理します。独自のメールサーバーを使用してメールを送信する場合は、Mailtrainでバウンスメッセージを処理する必要があります。 Mailtrainには、バウンスメッセージを処理する2つの方法があります。
- VERP経由
- Postfixログ経由
私は個人的にVERP方式を使用しています。これは、メールコミュニティで広く使用されており、2番目の方式ではサーバーのCPU使用率が高くなるためです。
VERPバウンス処理
VERP(可変エンベロープリターンパス)を使用すると、メーリングリストマネージャーはサブスクライバーごとに一意のエンベロープアドレスを使用します。 VERPを有効にするには、production.toml
を編集します ファイル。
sudo nano /var/www/mailtrain/config/production.toml
MailtrainホストでSMTPサーバーが実行されていない場合は、次のテキストを追加します。
[verp] enabled =trueport =25disablesenderheader =true
MailtrainサーバーでPostfixなどのSMTPサーバーが実行されている場合は、次のテキストを追加します。バウンス処理サーバーは127.0.0.1:2525
でリッスンします 。
[verp] enabled =true port =2525 host ="127.0.0.1" disablesenderheader =true
ファイルを保存して閉じます。次に、Mailtrainを再起動して、変更を有効にします。
sudo systemctl restart mailtrain
Mailtrain Webインターフェースで、settings
に移動します ->VERP Bounce Handlding
。 Use VERP to catch bounces
を確認します 。設定を保存します。
次に、サーバーのホスト名(bounces.your-domain.com
)のMXレコードを作成する必要があります )次に、このホスト名のAレコードを追加し、Mailtrainホストを指すようにして、バウンスメッセージをMailtrainホストに送信できるようにします。リスト内の各サブスクライバーには、[email protected]
のような一意のエンベロープアドレスがあります。 。
ドメイン名にDMARCレコードをデプロイした場合は、SPFアライメントをリラックスモードに設定する必要があることに注意してください。厳密モードに設定されている場合、ニュースレターはDMARCチェックに失敗する可能性があります。
Mailtrainバウンス処理サーバーが127.0.0.1のポート2525でリッスンしていて、Postfix SMTPサーバーがパブリックIPアドレスのポート25でリッスンしている場合、PostfixがバウンスメッセージをMailtrainに中継できるようにトランスポートマップを設定する必要があります。路線図ファイルを作成します。
sudo nano / etc / postfix /transport
このファイルに次の行を追加します。これにより、Postfixは[email protected]
のようなアドレスのメールを中継するようになります。 Mailtrainバウンス処理サーバーに送信します。
bounces.your-domain.com smtp:[127.0.0.1]:2525
ファイルを保存して閉じます。次に、インデックスファイルを生成します。
sudo postmap / etc / postfix /transport
Postfixのメイン設定ファイルを編集します。
sudo nano /etc/postfix/main.cf
次の行をファイルに追加します。
transport_maps =hash:/ etc / postfix /transport
ファイルを保存して閉じます。次に、変更を有効にするためにPostfixを再起動します。
sudo systemctl restart postfix
未購読の電子メールアドレスを自動的にクリーンアップするcronジョブ
購読していないメールアドレスは、MailtrainのWebベースの管理パネルで手動で削除できますが、MySQL / MariaDBコマンドを使用して削除する方がはるかに効率的で、Cronジョブを作成するだけでこのタスクを自動化できます。
まず、MySQL/MariaDBデータベースサーバーにログインします。
sudo mysql -u root
次に、メールトレインデータベースに接続します。
メールトレインを使用する;
サブスクライバーの情報はsubscription
に保存されます テーブル。複数のメーリングリストがある場合は、複数のsubscription
があります。 テーブル。次のSQLコマンドを使用して、これらすべてのテーブルを一覧表示できます。
'subscription%'のようなテーブルを表示します;
サーバーに出力します。
+ ------------------------------------- + | Tables_in_mailtrain(subscription%)| + ------------------------------------- + |サブスクリプション||サブスクリプション__1|| Subscription__2 | + ------------------------------------- +
最初のテーブルは空のテーブルです。 Mailtrainには2つのリストがあります。それらはsubscription__1
に保存されます およびsubscription__2
テーブル。購読しているメールアドレスのステータスコードは1
に設定されています 。未登録のメールアドレスのステータスコードは2
に設定されています 。したがって、サブスクライブされていない電子メールアドレスを削除するには、次のSQLコマンドを実行できます。
DELETE FROM Subscription__1 where status ='2'; DELETE FROM Subscription__2 where status ='2';
MySQL / MariaDBデータベースサーバーを終了するには、
を実行します。終了;
次に、rootユーザーのcrontabファイルを開きます。
sudo crontab -e
次の2行を追加します。
#未購読のメールアドレスをメーリングリストから毎日削除@ daily @ usr / bin / mysql -u root mailtrain -Bse "DELETE FROM Subscription__1 where status ='2'; DELETE FROM Subscription__2 where status ='2';"
ファイルを保存して閉じます。これで完了です。
悪意のあるサインアップへの対処
何もすることがない人がいますが、偽のメールアドレスを使用してメーリングリストに登録します。そのため、登録確認メールが偽のメールアドレスに送信され、受信トレイに未配信のメールレポートが届く場合があります。
このようなroundcubeのWebメールを使用して、この種の電子メールメッセージを自動的に削除するフィルターを作成できます。次のスクリーンショットでは、次の場合にメッセージを自動的に削除するフィルターを作成したことがわかります
- 件名に「未配信のメールが送信者に返送されました」が含まれています
- 未配信のメッセージレポートが私のアドレスに送信されます。
- 本文には「サブスクリプションを確認してください」が含まれています。 (サインアップ確認メールにこのフレーズが含まれているためです。)