Mailtrain is a self-hosted newsletter application built with Node.js and a database server (MySQL / MariaDB). If you have a large subscriber list and you want an easy way to manage it on a self-hosted platform in your own environment, then Mailtrain should be a good place to start.
This brief tutorial shows students and new users how to install and configure Mailtrain on a self-hosted Ubuntu 16.04 | 18.04 system to easily manage your newsletter subscribers.
Some of the features provided by Mailtrain includes, list management, custom field, encryption, template editor and automation. This app has everything you’d find in a paid list service and it’s free.
For more about Mailtrain, please check its homepage.
To get started with installing Mailtrain on Ubuntu, follow the steps below:
Install Node.js
Mailtrain is built on top of Node.js and Node.js is easy to install in Ubuntu.
Before installing the latest version of Node.js, you must add its PPA to Ubuntu. This repository is provided by the official package maintainer. To add the repository, run the commands below.
sudo apt update sudo apt install curl git
There are two repositories you can install. one repository contains the latest Node.js packages and the other has the LTS or (Long Term Support) packages. if you need the latest and greatest, then install the first repository.
On the other hand, if you need a more stable and tested Node.js packages, then install the LTS repository.
Then for the Latest release, add this PPA.
curl -sL | sudo bash -
To install the LTS release, use this PPA
curl -sL | sudo bash -
After that, you can now install latest version of Node.js from the particular repository you choose. If you add both repositories, the latest version of Node.js will be installed and not the LTS.
To install, run the commands below
sudo apt install nodejs
After installing, both Node.js and NPM modules should be installed and ready to use.
You can use the commands below to view the version number installed.
node -v npm -v
To test whether the web server is properly installed, run the commands below to create a test file called http_server.js in your home folder.
cd ~/ nano http_server.js
Then copy and paste the content below into the file and save.
const http = require('http'); const hostname="127.0.0.1"; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); server.listen(port, hostname, () => { console.log(`Server running at });
After that save the file and run the commands below to start the server.
node http_server.js
You should see an output that reads:
Server running at
Now open your browser and browse to the server hostname or IP address followed by port 3000. and you should see a default page with Hello World
Install MariaDB
Now that Node.js is installed, continue below to installing MariaDB.
To install MariaDB run the commands below:
sudo apt-get install mariadb-server mariadb-client
After installing MariaDB, the commands below can be used to stop, start and enable MariaDB service to always start up when the server boots.
Run these on Ubuntu 16.04 LTS
sudo systemctl stop mysql.service sudo systemctl start mysql.service sudo systemctl enable mysql.service
Run these on Ubuntu 18.10 and 18.04 LTS
sudo systemctl stop mariadb.service sudo systemctl start mariadb.service sudo systemctl enable mariadb.service
Next, run the commands below to secure the database server with a root password if you were not prompted to do so during the installation.
sudo mysql_secure_installation
When prompted, answer the questions below by following the guide.
- Enter current password for root (enter for none): Just press the Enter
- Set root password? [Y/n]: Y
- New password: Enter password
- Re-enter new password: Repeat password
- Remove anonymous users? [Y/n]: Y
- Disallow root login remotely? [Y/n]: Y
- Remove test database and access to it? [Y/n]: Y
- Reload privilege tables now? [Y/n]: Y
Now that MariaDB is installed, to test whether the database server was successfully installed, run the commands below.
sudo mysql -u root -p
type the root password when prompted.
If you see a similar screen as shown above, then the server was successfully installed.
Next, logon to MariaDB database server, run the commands below.
sudo mysql -u root -p
Then create a database called mailtrain
CREATE DATABASE mailtrain;
Create a database user called mailtrainuser with a new password
CREATE USER 'mailtrainuser'@'localhost' IDENTIFIED BY 'new_password_here';
Then grant the user full access to the database.
GRANT ALL ON mailtrain.* TO 'mailtrainuser'@'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;
Finally, save your changes and exit.
FLUSH PRIVILEGES; EXIT;
Download and Install Mailtrain
At this point, both Node.js and MariaDB should be installed and configured. For this tutorial, I’m going to install Mailtrain in my home directory. Change into the current user home folder and download Mailtrain.
cd ~/ wget unzip master.zip mv mailtrain-master mailtrain
Copy ~/mailtrain/config/default.toml as ~/mailtrain/config/production.toml and update MySQL and any other settings in it.
cp ~/mailtrain/config/default.toml ~/mailtrain/config/production.toml nano ~/mailtrain/config/production.toml
Then edit the highlighted lines and save the file.
[mysql] host="localhost" user="mailtrainuser" password="password_here" database="mailtrain" # Some installations, eg. MAMP can use a different port (8889) # MAMP users should also turn on "Allow network access to MySQL" otherwise MySQL might not be accessible port=3306 charset="utf8mb4"
After that, run the commands below to install all dependencies.
cd ~/mailtrain npm install --production
After that, run the commands below to start the server
cd ~/mailtrain NODE_ENV=production npm start
You should see similar lines as below:
> [email protected] start /home/richrd/mailtrain > node index.js info Using local auth Warning: connect.session() MemoryStore is not designed for a production environment, as it will leak memory, and will not scale past a single process. info sql SQL not set up, initializing info sql Loading tables from mailtrain.sql info sql Update 25 applied info sql Update 26 applied info sql Update 27 applied info sql Update 28 applied info sql Update 29 applied info sql Update 30 applied info sql Update 31 applied info sql Update 32 applied info sql Update 33 applied info sql Update 34 applied info sql Database check completed info Express WWW server listening on port 3000 verb UTC Updating timezone offsets info Service All services started
Open your browser and browse to the server hostname or IP address followed by port #3000
You should see Mailtrain default homepage.
Installation should be complete. Login with the username admin and the password test. Once logged in, update the user information and password via the Mailtrain web interface.
Default username and password:
Username: admin Password: test
Congratulations! You have successfully install and configured Mailtrain on Ubuntu 16.04 | 18.04.
You may also like the post below: