Tutorial ini akan menunjukkan cara menginstal Mailtrain di server Ubuntu 16.04. Mailtrain adalah aplikasi buletin self-hosted sumber terbuka, alternatif untuk penyedia layanan email komersial seperti Mailchimp. Anda dapat menggunakan Mailtrain untuk mengirim email ke pelanggan email Anda melalui server email Anda sendiri atau dengan menggunakan layanan relai SMTP (Mailjet, SendGrid, AmazonSES, Mailgun, dll).
Mailtrain dirilis di bawah persyaratan lisensi GPL v3.0, dibangun di atas Node.js dan MySQL/MariaDB. Versi terbaru adalah v1.24.1, dirilis pada 28 September 2018. Fitur Mailtrain adalah sebagai berikut:
- Ini memungkinkan Anda mengelola milis besar dengan mudah (seperti 1 juta pelanggan).
- Anda dapat menambahkan pelanggan secara manual, melalui API, atau mengimpor dari file CSV.
- Mendukung bidang khusus (bidang teks, angka, tarik-turun atau kotak centang), tag gabungan, dan formulir khusus.
- Segmentasi daftar.
- Kampanye RSS:buat buletin otomatis dari umpan RSS dan kirimkan ke pelanggan.
- Pelanggan dapat mengunggah kunci publik GPG mereka dan Mailtrain akan mengenkripsi buletin untuk mereka.
- Memungkinkan Anda memeriksa statistik klik individual untuk setiap tautan.
- Editor template email dan editor kode HTML tingkat lanjut.
- Otomasi:kirim email tertentu saat pengguna mengaktifkan pemicu yang telah Anda tentukan sebelumnya.
- Anda dapat membuat daftar email terbuka (memungkinkan langganan publik) dan daftar email tertutup (pelanggan ditambahkan ke daftar oleh admin).
Prasyarat Instalasi Mailtrain di Server Ubuntu 16.04
Untuk menjalankan Mailtrain, Anda memerlukan server dengan setidaknya 1GB RAM. Anda dapat mengklik tautan khusus ini untuk mendapatkan kredit gratis $100 di DigitalOcean. (Hanya untuk pengguna baru). Jika Anda sudah menjadi pengguna DigitalOcean, Anda dapat mengklik tautan khusus ini untuk mendapatkan kredit gratis senilai $50 di Vultr (hanya untuk pengguna baru). Setelah Anda memiliki akun di DigitalOcean atau Vultr, instal Ubuntu 16.04 di server Anda dan ikuti petunjuk di bawah.
Anda juga harus memiliki nama domain. Saya mendaftarkan nama domain saya dari NameCheap karena harganya murah dan mereka memberikan perlindungan privasi whois secara gratis.
Langkah 1:Instal Server Database MariaDB
Data pelanggan Anda akan disimpan dalam database. Mailtrain mendukung MySQL dan MariaDB. MariaDB adalah pengganti drop-in untuk MySQL. Ini dikembangkan oleh mantan anggota tim MySQL yang khawatir bahwa Oracle mungkin mengubah MySQL menjadi produk sumber tertutup. Jadi mari kita instal server database MariaDB.
Masukkan perintah berikut untuk menginstalnya di Ubuntu 16.04.
sudo apt install mariadb-server mariadb-client
Setelah terinstal, server MariaDB akan otomatis menatap. Gunakan systemctl untuk memeriksa statusnya.
systemctl status mysql
Contoh keluaran:
● mariadb.service - server database MariaDB 10.1.34 Dimuat:dimuat (/lib/systemd/system/mariadb.service; diaktifkan; preset vendor:diaktifkan) Aktif:aktif (berjalan) sejak Sat 2018-09-08 11 :13:27 UTC; 21 detik yang lalu Dokumen:man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ PID Utama:3473 (mysqld) Status:"Menerima permintaan SQL Anda sekarang..." Tugas:27 (batas :505) CGroup:/system.slice/mariadb.service 3473 /usr/sbin/mysqld
Jika tidak berjalan, mulai dengan perintah ini:
sudo systemctl start mysql
Untuk mengaktifkan MariaDB agar secara otomatis memulai pada waktu boot sistem, jalankan
sudo systemctl aktifkan mysql
Sekarang jalankan skrip keamanan pasca instalasi.
sudo mysql_secure_installation
Saat diminta untuk memasukkan kata sandi root MariaDB, tekan tombol Enter karena kata sandi root belum disetel. Kemudian masukkan y
untuk mengatur kata sandi root untuk server MariaDB.
Selanjutnya, Anda dapat menekan Enter untuk menjawab semua pertanyaan yang tersisa, yang akan menghapus pengguna anonim, menonaktifkan login root jarak jauh, dan menghapus database pengujian. Langkah ini merupakan persyaratan dasar untuk keamanan database MariaDB. (Perhatikan bahwa huruf Y
dikapitalisasi, yang berarti itu adalah jawaban default.)
Langkah 2:Buat Database dan Pengguna untuk Mailtrain
Sekarang kita perlu masuk ke konsol MariaDB dan membuat database dan pengguna untuk Mailtrain. Secara default, paket MaraiDB di Ubuntu menggunakan unix_socket untuk mengautentikasi login pengguna, yang pada dasarnya berarti Anda dapat menggunakan nama pengguna dan kata sandi OS untuk masuk ke konsol MariaDB. Jadi Anda dapat menjalankan perintah berikut untuk login tanpa memberikan kata sandi root MariaDB.
sudo mysql -u root
Buat database untuk Mailtrain menggunakan perintah berikut. Saya menamakannya mailtrain
, tetapi Anda dapat menggunakan nama apa pun yang Anda suka. (Jangan tinggalkan titik koma.)
membuat database mailtrain;
Kemudian masukkan perintah di bawah ini untuk membuat pengguna database untuk Mailtrain dan memberikan semua hak istimewa database mailtrain kepada pengguna. Ganti mtuser
dan your-password
dengan nama pengguna dan kata sandi pilihan Anda.
berikan semua hak istimewa di mailtrain.* ke mtuser@localhost yang diidentifikasi oleh 'mtuser_password';
Selanjutnya, buat pengguna dengan akses hanya baca ke database mailtrain. Saya menamai pengguna ini mt_readonly
.
berikan pilihan pada mailtrain.* KE mt_readonly@localhost diidentifikasi oleh 'mt_readonly_password';
Bersihkan tabel hak istimewa agar perubahan diterapkan, lalu keluar dari konsol MariaDB.
hak flush;keluar;
Langkah 3:Instal Node.js
Mailtrain dibuat di Node.js, yang merupakan lingkungan run-time JavaScript yang menerjemahkan kode JavaScript yang dapat dibaca manusia menjadi kode mesin. Jadi kita perlu menginstal Node.js di Ubuntu 16.04 untuk menjalankan Mailtrain. Mailtrain membutuhkan Node.js 7+. Tutorial ini akan menginstal rilis LTS Node.js (V8.x) saat ini dari repositori NodeSource.
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -sudo apt install -y nodejs
nodejs
package berisi biner npm (Node.js package manager), jadi tidak perlu menginstalnya secara terpisah. Untuk memeriksa versi Node.js dan npm Anda, jalankan
simpul -vnpm -v
Keluaran:
Untuk mengkompilasi dan menginstal add-on asli dari npm, Anda juga perlu menginstal alat bantu:
sudo apt install -y build-essential
Langkah 4:Jalankan Mailtrain
Pergi ke /var/www/
dan ambil file Mailtrain dari Github.
cd /var/www/sudo git clone https://github.com/Mailtrain-org/mailtrain.git
Impor data SQL awal ke database kereta surat dengan menggunakan perintah berikut. Anda harus memasukkan kata sandi mtuser
.
mysql -u mtuser -p mailtrainBuat file konfigurasi production.toml.
sudo nano /var/www/mailtrain/config/production.tomlDalam file ini, Anda dapat menambahkan konfigurasi yang menggantikan konfigurasi default di
/var/www/mailtrain/config/default.toml
mengajukan. Kita hanya perlu menambahkan konfigurasi berikut.user="mailtrain"group="mailtrain"[log]level="error"[www]secret="Ganti ini dengan beberapa karakter acak"[mysql]user="mtuser"password="mtuser_password"[antrian] proses=5Simpan dan tutup file. Kemudian buat
mailtrain
pengguna dan grup untuk menjalankan daemon mailtrain. Perhatikan bahwa kami tidak perlu membuat sandi untuk pengguna ini, jadi kami membuat pengguna sistem, bukan pengguna biasa.sudo adduser --system --group mailtrainBuat file konfigurasi untuk pekerja laporan.
sudo nano /var/www/mailtrain/workers/reports/config/production.tomlTambahkan konfigurasi berikut. Pekerja laporan ini akan memiliki akses hanya baca ke database mailtrain.
[log]level="error"[mysql]user="mt_readonly"password="mt_readonly_password"Simpan dan tutup file. Kemudian ubah izin
/var/www/mailtrain/
.sudo chown mailtrain:mailtrain /var/www/mailtrain/ -Rsudo chmod o-rwx /var/www/mailtrain/config/Dan instal paket simpul yang diperlukan.
cd /var/www/mailtrainsudo npm install --no-progress --production --unsafe-perm=trueSalin file unit layanan systemd ke
/etc/systemd/system/
direktori.sudo cp /var/www/mailtrain/setup/mailtrain.service /etc/systemd/system/Buka file ini.
sudo nano /etc/systemd/system/mailtrain.serviceKarena kami mengunduh Mailtrain ke
/var/www/mailtrain/
direktori, jadi ubah direktori kerja dari/opt/mailtrain
ke/var/www/mailtrain
. Simpan dan tutup file ini. Kemudian mulaimailtrain.service
.sudo systemctl start mailtrain.serviceAktifkan mulai otomatis pada waktu boot sistem.
sudo systemctl aktifkan mailtrain.servicePeriksa statusnya. Pastikan itu berjalan. Jika output mengatakan aktivasi (auto-restart), maka tunggu beberapa saat hingga Mailtrain memulai.
sudo systemctl status mailtrain.serviceSetelah Mailtrain berjalan, Anda dapat mengakses antarmuka web Mailtrain melalui port 3000.
ip-server-Anda:3000
Menyiapkan Proksi Terbalik dan Mengaktifkan HTTPS
Sebelum menggunakan antarmuka web Mailtrain, letakkan di belakang Nginx lalu aktifkan HTTPS. Instal server web Nginx di Ubuntu 16.04 dengan:
sudo apt install nginxSekarang Anda dapat menyalin contoh
mailtrain-nginx.conf
file ke/etc/nginx/conf.d/
direktori.sudo cp /var/www/mailtrain/setup/mailtrain-nginx.conf /etc/nginx/conf.d/Buka file ini.
sudo nano /etc/nginx/conf.d/mailtrain-nginx.confTemukan baris berikut.
nama_server mailtrain.org www.mailtrain.org;Ubah nilai
server_name
parameter ke nama domain Anda sendiri sepertinewsletter.your-domain.com
. Jangan lupa untuk membuat catatan A untuk sub-domain ini.buletin nama_server.linuxbabe.com;Simpan dan tutup file. Kemudian uji konfigurasi Nginx.
sudo nginx -tJika pengujian berhasil, muat ulang Nginx agar perubahan diterapkan.
sudo systemctl reload nginxAnda sekarang seharusnya dapat mengakses antarmuka web Mailtrain melalui subdomain Anda:
newsletter.your-domain.com
.Sekarang edit
/var/www/mailtrain/config/production.toml
berkas.sudo nano /var/www/mailtrain/config/production.tomlDalam
[www]
, tambahkan dua baris berikut untuk menunjukkan bahwa mailtrain berada di belakang proxy Nginx dan membuatnya hanya mendengarkan di alamat host lokal.host="127.0.0.1"proxy=trueSimpan dan tutup file. Kemudian mulai ulang Mailtrain agar perubahan diterapkan.
sudo systemctl restart mailtrainMengaktifkan HTTPS Dengan Let's Encrypt
Instal klien Let's Encrypt (certbot) di server Ubuntu 16.04 Anda.
sudo apt install software-properties-commonsudo add-apt-repository ppa:certbot/certbotsudo apt updatesudo apt install certbot python3-certbot-nginxKemudian Anda dapat menggunakan plugin Nginx untuk mendapatkan dan menginstal sertifikat TLS secara otomatis dengan menjalankan perintah berikut.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email your-email-address -d newsletter.domain-anda.com
Sekarang Anda dapat mengakses antarmuka web Mailtrain melalui nama domain dan koneksi HTTPS yang aman.
Masuk dengan nama pengguna
Catatan:Akun admin adalah sasaran empuk para peretas. Untuk keamanan terbaik, Anda disarankan untuk mengubah nama pengguna dariadmin
dan sanditest
. Kemudian ubah alamat email dan kata sandi akun Anda. Bukasettings
halaman untuk mengubah konfigurasi default. Anda harus mengubah alamat layanan darihttp://localhost:3000/
ke subdomain Anda (https://newsletter.your-domain.com
).admin
untuk sesuatu yang lain. Antarmuka web Mailtrain tidak menyediakan opsi seperti itu, tetapi Anda dapat mengubah nama pengguna di database MariaDB menggunakan perintah SQL.Di
Mailer Settings
, Anda dapat menggunakan SMTP jika memiliki server email sendiri atau menggunakan Amazon SES. Sebenarnya, Anda juga dapat menggunakan layanan relai SMTP lainnya diSMTP
tab. Pada tangkapan layar di bawah, saya menggunakan server email saya sendiri. Email akan dikirimkan pada port 587 dengan enkripsi STARTTLS.
Simpan pengaturan Anda. Kemudian Anda dapat membuat daftar untuk menguji fungsionalitas Mailtrain.
Cara Menangani Pesan Bounce di Mailtrain
Cepat atau lambat, daftar email Anda akan berisi alamat yang tidak dapat Anda kirimi email. Misalnya, ketika pelanggan yang menggunakan alamat email perusahaan keluar dari perusahaan, alamat email tersebut akan dihapus. Jadi server email Anda akan menerima pesan pentalan yang mengatakan bahwa email tidak dapat dikirim.
Jika Anda menggunakan layanan relai SMTP untuk mengirim email, mereka akan menangani pesan pentalan untuk Anda. Jika Anda menggunakan server email Anda sendiri untuk mengirim email, maka Anda perlu menangani pesan pentalan di Mailtrain. Mailtrain menawarkan dua cara untuk menangani pesan yang terpental.
- melalui VERP
- melalui log Postfix
Saya pribadi menggunakan metode VERP, karena banyak digunakan di komunitas email dan juga karena metode kedua menyebabkan penggunaan CPU yang tinggi di server saya.
Penanganan Pantulan VERP
Dengan VERP (jalur pengembalian amplop variabel), pengelola daftar email Anda menggunakan alamat amplop unik untuk setiap pelanggan. Untuk mengaktifkan VERP, edit production.toml
berkas.
sudo nano /var/www/mailtrain/config/production.toml
Jika host Mailtrain Anda tidak menjalankan server SMTP, tambahkan teks berikut.
[verp]enabled=trueport=25disablesenderheader=true
Jika server Mailtrain Anda menjalankan server SMTP seperti Postfix, tambahkan teks berikut. Server penanganan pentalan akan mendengarkan 127.0.0.1:2525
.
[verp] diaktifkan=true port=2525 host="127.0.0.1"disablesenderheader=true
Simpan dan tutup file. Kemudian mulai ulang Mailtrain agar perubahan diterapkan.
sudo systemctl restart mailtrain
Di antarmuka web Mailtrain, buka Settings
-> VERP Bounce Handlding
. Centang Use VERP to catch bounces
. Simpan setelan Anda.
Selanjutnya, Anda perlu membuat data MX untuk nama host server (bounces.your-domain.com
), lalu tambahkan A record untuk nama host ini, yang mengarah ke host Mailtrain Anda, sehingga pesan pentalan dapat dikirim ke host Mailtrain Anda. Setiap pelanggan dalam daftar Anda akan memiliki alamat amplop unik seperti [email protected]
.
Perhatikan bahwa jika Anda menerapkan data DMARC untuk nama domain Anda, maka penyelarasan SPF harus disetel ke mode santai. Jika disetel ke mode ketat, buletin Anda bisa gagal dalam pemeriksaan DMARC.
Jika server penanganan bouncing Mailtrain mendengarkan pada port 2525 dari 127.0.0.1 dan server SMTP Postfix mendengarkan pada port 25 dari alamat IP publik, maka Anda perlu mengatur peta transport sehingga Postfix dapat menyampaikan pesan bouncing ke Mailtrain. Buat file peta transportasi.
sudo nano /etc/postfix/transport
Tambahkan baris berikut ke file ini. Ini memberitahu Postfix untuk menyampaikan email dengan alamat seperti [email protected]
ke server penanganan bouncing Mailtrain.
bounces.domain-anda.com smtp:[127.0.0.1]:2525
Simpan dan tutup file. Kemudian buat file indeks.
sudo postmap /etc/postfix/transport
Edit file konfigurasi utama Postfix.
sudo nano /etc/postfix/main.cf
Tambahkan baris berikut ke file.
transport_maps =hash:/etc/postfix/transport
Simpan dan tutup file. Kemudian restart Postfix agar perubahan diterapkan.
sudo systemctl restart postfix
Cron Job untuk Membersihkan Alamat Email yang Tidak Berlangganan Secara Otomatis
Anda dapat secara manual menghapus alamat email yang tidak berlangganan di panel admin berbasis web Mailtrain, tetapi jauh lebih efisien untuk menghapusnya menggunakan perintah MySQL/MariaDB, lalu Anda cukup membuat tugas Cron untuk mengotomatiskan tugas ini.
Pertama, login ke server database MySQL/MariaDB.
sudo mysql -u root
Kemudian sambungkan ke database kereta surat.
gunakan kereta surat;
Info pelanggan disimpan di subscription
tabel. Jika Anda memiliki beberapa milis, maka Anda akan memiliki beberapa subscription
tabel. Anda dapat membuat daftar semua tabel ini menggunakan perintah SQL berikut.
tampilkan tabel seperti 'subscription%';
Keluaran di server saya.
+-------------------------------------+| Tables_in_mailtrain (berlangganan%) |+------------------------------------------------+| langganan || langganan__1 || berlangganan__2 |+------------------------------------------------+
Meja pertama adalah meja kosong. Saya memiliki dua daftar di Mailtrain. Mereka disimpan di subscription__1
dan subscription__2
meja. Alamat email langganan memiliki kode status yang disetel ke 1
. Alamat email yang berhenti berlangganan memiliki kode status yang disetel ke 2
. Jadi, untuk menghapus alamat email yang tidak berlangganan, Anda dapat menjalankan perintah SQL berikut.
HAPUS DARI langganan__1 di mana status ='2';HAPUS DARI langganan__2 di mana status ='2';
Untuk keluar dari server database MySQL/MariaDB, jalankan
keluar;
Sekarang buka file crontab pengguna root.
sudo crontab -e
Tambahkan dua baris berikut.
# Hapus alamat email yang tidak berlangganan dari milis daily@daily /usr/bin/mysql -u root mailtrain -Bse "DELETE FROM subscription__1 where status ='2';DELETE FROM subscription__2 where status ='2';"Simpan dan tutup file. Dan selesai.
Menangani Pendaftaran Berbahaya
Ada orang yang tidak ada hubungannya selain menggunakan alamat email palsu untuk mendaftar ke daftar email Anda, jadi email konfirmasi pendaftaran akan dikirim ke alamat email palsu dan Anda mungkin mendapatkan laporan email yang tidak terkirim di kotak masuk Anda.
Anda dapat menggunakan email web Anda seperti roundcube untuk membuat filter, yang secara otomatis menghapus pesan email semacam ini. Pada tangkapan layar berikut, Anda dapat melihat saya membuat filter yang secara otomatis menghapus pesan jika
- Subjek berisi “Surat Tidak Terkirim Dikembalikan ke Pengirim“
- Laporan pesan yang tidak terkirim dikirim ke alamat saya.
- Isi berisi “Harap Konfirmasi Berlangganan”. (Karena email konfirmasi pendaftaran berisi frasa ini.)