Install Mautic Self-Hosted Email Marketing on Ubuntu 18.04 Server
This tutorial will be showing you how to set up Mautic email marketing platform on Ubuntu 18.04 with Apache or Nginx web server. Mautic is a free open source alternative to commercial email service providers like MailChimp.
Key features of Mautic includes
- Lead nurturing and tracking
- Marketing campaigns
- Dripflow programs
- Create Landing pages
- Automatically ad contacts via API
- Social media monitoring
- Install free plugins to extend the functionality of Mautic.
- Mautic can be easily integrated with third-party SMTP relay services like Gmail, Mandrill, Sendgrid, Amazon SES. You can also use your own mail server.
- Can integrate with many popular third-party apps like Twilio, Pipedrive, Salesforce, Gmail, Facebook, Instagram, Twitter, GoToMeeting, Hubspot, SugarCRM, MailChimp, Zoho CRM, Zapier, and many more.
- Automatic bounce handling via IMAP, so you don’t have to manually remove nonexistent email addreses.
- Supports multiple user accounts and roles.
- and much more
Benefits of Self Hosting Email Marketing Platform
Why do you want to self-host email marketing platform instead of using third-party ESPs (Email Service Provider) like MailChimp?
For starters, self-hosting can save you a lot of money. Mautic is free and open-source software. You only need to pay $26/month for the VPS (virtual private server), which can run a full-featured mail server and the Mautic email marketing platform. It can easily handle millions of subscribers. So your total cost is always $26/month no matter how many subscribers you have. If you own millions of subscribers on MailChimp, the cost would be thousands of dollars per month.
Another reason is that Firefox browser blocks third-party trackers by default, so the MailChimp signup widget on your website doesn’t work properly and the MailChimp pop-up won’t shown to your visitors. By hosting the email marketing platform under your own domain name, Firefox doesn’t block the tracker, so your signup widget or popup can work properly. This is also true if users of other web browsers decide to block third-party trackers.
In addition, you can manipulate subscribers’ information from the database and even automate it with a Cron job. For example, I often see there are typos when a visitor enters information on the sign-up form. I use a cron job to automatically correct some common typos.
Last but not least, self-hosting can protect your freedom of speech. You never need to worry about an email service provider shutting down your account like Mailchimp did.
Challenges of Self Hosting Email Marketing Platform
The first problem you face is find a good self-hostable email marketing platform. Previously we have discussed how to set up Mailtrain, which is an open-source alternative to MailChimp, on Ubuntu 18.04 server. However, Mailtrain is missing several features a typical site owner would like to have.
- Mailtrain doesn’t provide users with an easy way to insert signup widget or popup on website.
- Users can’t set time schedule for RSS campaigns.
- No contact rating.
After all, Mailtrain is just a project of a handful of software developers.
Mautic, on the other hand, is a project of a team of developers and has developed more and more features over the years. You do have an easy way to insert signup widget and popup on your website with Mautic. There’s also a vibrant and very active community around it. Furthermore, Mautic is more than just a newsletter/email marketing platform. It’s a full-blown digital experience platform, as they call it. With Acquia (which is a company offering paid service for the Drupal open source content management system) acquiring Mautic in May 2019, the future for Mautic has never been brighter. So I feel it’s time to switch from Mailtrain to Mautic.
The second challenge is have the technical expertise to set up the email marketing platform on your own server. Don’t worry, I will show you how in just a few moments.
The third challenge is that you need to have good reputation for the IP address of your mail server and your domain name as well. Otherwise, your emails will land in the spam folder. Gmail Postmaster Tools can show you if you have good reputation for your domain name and IP address. As you can see from the screenshot below, I always have high domain reputation with Gmail, because I always follow best practices to send emails to my subscribers. None of my subscribers reported my email as spam.
To send out bulk emails, you need to follow these rules or practices.
- Make sure the recipient gave you permission to send email. Use double opt-in to verify subscriber’s email address.
- Don’t send cold emails to thousands of people who have never received emails from you before. Instead, you need to warm up your IP address. For example, send 500 emails on day 1, then send 1000 emails on day 2, send 2000 emails on day 3.
- Include your contact information and your mailing address at the bottom of the email message.
- Personalize the email message as much as possible. For example, include the recipient’s name in the email.
- Conform to CAN-SPAM Act
- Avoid large attachments.
- Clean your email list. For example, delete email subscribers that haven’t opened your email in the last 30 days.
- Get approved as Return Path Certified Sender.
- Test your email placement with GlockApps.
- Use multiple IP addresses to spread email traffic so you will have better email deliverability.
I also recommend you to check out Gmail, Yahoo, Hotmail’s bulk email best practices. Now let’s look at how to install Mautic on Ubuntu 18.04 server.
Prerequisites of installing Mautic on Ubuntu 18.04 Server
If you don’t have your own mail server yet, I recommend using the free iRedMail program to quickly set up your own mail server before installing Mautic, so you don’t have to spend money on commercial SMTP relay service.
Mautic is written in PHP and relies on MySQL/MariaDB database server. So you need to set up a LAMP stack or LEMP stack. If you prefer Apache web server, then set up LAMP stack.
If you prefer Nginx web server, then set up LEMP stack.
Note that iRedMail will automatically set up a LEMP stack for you, so if you are going to install Mautic on your iRedMail server, you don’t need to set up LEMP stack again.
You also need a domain name. I registered my domain name from NameCheap because the price is low and they give whois privacy protection for free. Without further ado, let’s install Mautic on Ubuntu 18.04 server.
Step 1: Download Mautic onto Your Ubuntu 18.04 Server
Download the latest stable version by executing the following command on your server.
wget https://github.com/mautic/mautic/releases/download/3.3.1/3.3.1-update.zip
Install the unzip
utility and unzip it to /var/www/mautic/
directory.
sudo apt install unzip sudo mkdir -p /var/www/mautic/ sudo unzip 3.3.1-update.zip -d /var/www/mautic/
Then make the web server user (www-data
) as the owner of this directory.
sudo chown -R www-data:www-data /var/www/mautic/
Step 2: Create a MariaDB Database and User for Mautic
Now we need to log in to MariaDB console and create a database and user for Mautic. By default, the MaraiDB package on Ubuntu uses unix_socket to authenticate user login, which basically means you can use username and password of the OS to log into MariaDB console. So you can run the following command to login without providing MariaDB root password.
sudo mysql -u root
Next,create a new database for Mautic using the following command. This tutorial names it mautic
, you can use whatever name you like for the database.
CREATE DATABASE mautic DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
The following command will create a database user and password, and at the same time grant all permission of the new database to the new user so later on Mautic can write to the database. Replace red texts with your preferred database name, username and password.
GRANT ALL ON mautic.* TO 'mauticuser'@'localhost' IDENTIFIED BY 'password';
Flush privileges table and exit MariaDB console.
FLUSH PRIVILEGES; EXIT;
Step 3: Install Required and Recommended PHP Modules.
Ubuntu 18.04 ships with PHP7.2 in the default repository. Mautic doesn’t support PHP7.2 any more. For best compatibility, it’s recommended to add the PHP7.4 PPA and install PHP7.4.
sudo add-apt-repository ppa:ondrej/php
Run the following command to install PHP modules required or recommended by Mautic
sudo apt install php-imagick php7.4-common php7.4-gd php7.4-imap php7.4-json php7.4-curl php7.4-imap php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-gmp
Then restart Apache. (If you use Nginx, you don’t need to restart Nginx.)
sudo systemctl restart apache2
Step 4: Create Apache Virtual Host or Nginx Config File for Mautic
Apache
If you use Apache web server, create a virtual host for Mautic.
sudo nano /etc/apache2/sites-available/mautic.conf
Put the following text into the file. Replace mautic.example.com
with your real domain name and don’t forget to set DNS A record for it.
<VirtualHost *:80>
ServerName mautic.example.com
DocumentRoot /var/www/mautic/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/mautic/>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Save and close the file. Then enable this virtual host with:
sudo a2ensite mautic.conf
Reload Apache for the changes to take effect.
sudo systemctl reload apache2
Now you should be able to see the Mautic web-based install wizard at http://mautic.example.com/installer
.
Nginx
If you use Nginx web server, create a virtual host for Mautic.
sudo nano /etc/nginx/conf.d/mautic.conf
Note: If you install Mautic on iRedMail server, you should create the virtual host under /etc/nginx/sites-enabled/
directory.
sudo nano /etc/nginx/sites-enabled/mautic.conf
Put the following text into the file. Replace mautic.example.com
with your real domain name and don’t forget to set DNS A record for it. Also note that if you install Mautic on iRedMail server, you should use the TCP socket (127.0.0.1:9999) instead of the Unix socket (unix:/run/php/php7.4-fpm.sock).
server { listen 80; listen [::]:80; server_name mautic.example.com; root /var/www/mautic; error_log /var/log/nginx/mautic.error; access_log /var/log/nginx/mautic.access; client_max_body_size 20M; index index.php index.html index.htm index.nginx-debian.html; location / { # try to serve file directly, fallback to app.php try_files $uri /index.php$is_args$args; } location ~ /(mtc.js|1.js|mtracking.gif|.*\.gif|mtc) { # default_type "application/javascript"; try_files $uri /index.php$is_args$args; } # redirect some entire folders rewrite ^/(vendor|translations|build)/.* /index.php break; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; #Note: If you install Mautic on iRedMail server, you should use the TCP socket instead. #fascgi_pass 127.0.0.1:9999 } location ~* ^/index.php { # try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; #Note: If you install Mautic on iRedMail server, you should use the TCP socket instead. #fascgi_pass 127.0.0.1:9999 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } # Deny everything else in /app folder except Assets folder in bundles location ~ /app/bundles/.*/Assets/ { allow all; access_log off; } location ~ /app/ { deny all; } # Deny everything else in /addons or /plugins folder except Assets folder in bundles location ~ /(addons|plugins)/.*/Assets/ { allow all; access_log off; } # location ~ /(addons|plugins)/ { deny all; } # Deny all php files in themes folder location ~* ^/themes/(.*)\.php { deny all; } # Don't log favicon location = /favicon.ico { log_not_found off; access_log off; } # Don't log robots location = /robots.txt { access_log off; log_not_found off; } # Deny yml, twig, markdown, init file access location ~* /(.*)\.(?:markdown|md|twig|yaml|yml|ht|htaccess|ini)$ { deny all; access_log off; log_not_found off; } # Allow access to certbot directory in order to obtain TLS certificate location ~ /.well-known/acme-challenge { allow all; } # Deny all attempts to access hidden files/folders such as .htaccess, .htpasswd, .DS_Store (Mac), etc... location ~ /\. { deny all; access_log off; log_not_found off; } # Deny all grunt, composer files location ~* (Gruntfile|package|composer)\.(js|json)$ { deny all; access_log off; log_not_found off; } # Deny access to any files with a .php extension in the uploads directory location ~* /(?:uploads|files)/.*\.php$ { deny all; } # A long browser cache lifetime can speed up repeat visits to your page location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ { access_log off; log_not_found off; expires 360d; } }
Save and close the file. Then test Nginx configuration.
sudo nginx -t
If the test is successful, reload Nginx for the changes to take effect.
sudo systemctl reload nginx
Now you should be able to see the Mautic web-based install wizard at http://mautic.example.com/installer
.
Step 5: Enabling HTTPS
To encrypt the HTTP traffic, we can enable HTTPS by installing a free TLS certificate issued from Let’s Encrypt. Run the following command to install Let’s Encrypt client (certbot) on Ubuntu 18.04 server.
sudo apt install certbot
Make sure the .well-known/acme-challenge/
directory exists and www-data
is the owner.
sudo mkdir -p /var/www/mautic/.well-known/acme-challenge sudo chown www-data:www-data /var/www/mautic/.well-known/acme-challenge
If you use Nginx, then you also need to install the Certbot Nginx plugin.
sudo apt install python3-certbot-nginx
Next, run the following command to obtain and install TLS certificate.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d mautic.example.com
If you use Apache, install the Certbot Apache plugin.
sudo apt install python3-certbot-apache
And run this command to obtain and install TLS certificate.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d mautic.example.com
Where
--nginx
: Use the nginx plugin.--apache
: Use the Apache plugin.--agree-tos
: Agree to terms of service.--redirect
: Force HTTPS by 301 redirect.--hsts
: Add the Strict-Transport-Security header to every HTTP response. Forcing browser to always use TLS for the domain. Defends against SSL/TLS Stripping.--staple-ocsp
: Enables OCSP Stapling. A valid OCSP response is stapled to the certificate that the server offers during TLS.
The certificate should now be obtained and automatically installed.
If you encounter the following error, then you can try using the webroot plugin to obtain TLS certificate.
IMPORTANT NOTES: - The following errors were reported by the server: Domain: mautic.your-domain.com Type: unauthorized Detail: Invalid response from http://mautic.your-domain.com/.well-known/acme-challenge/oPobDrRkFbimsOD5Jbcx2VQfbMh9Hv3VueNhKdyhbcg [xx.xx.xx.xx]: "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx</center>\r\n" To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address.
Nginx web server with webroot plugin
sudo certbot --webroot -w /var/www/mautic -i nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d mautic.example.com
Apache web server with webroot plugin
sudo certbot --webroot -w /var/www/mautic -i -apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d mautic.example.com
Step 6: Finish Mautic Installation in Web Browser
Now in your browser address bar, type in your domain name for Mautic to access the web install wizard.
https://mautic.your-domain.com/installer
or
https://mautic.your-domain.com/index.php/installer
click Next Step
.
In step 1, enter the MariaDB/MySQL database details.
In step 2, create an admin account.
In step 3, configure email settings. Note that you have many options in mailer transport. You can use PHP Mail, sendmail, or Gmail or integrate Mautic with third-party email services like Mandrill, Sendgrid, Amazon SES. These settings can always be changed after installation in Mautic configurations page. If Mautic is installed on your mail server, then you need to choose Sendmail
as the mailer transport, so Mautic will use your mail server to send email.
If Mautic and your mail server are running on different machines and you want Mautic to send emails via your mail server, then you need to choose Other SMTP server
as mailer transport.
- Enter the hostname of your mail server
- Choose port 587
- Choose TLS or SSL encryption.
- Choose Plain the authentication mode
- Enter the login credential of an email address on your mail server.
After step 3 is done, you can log into Mautic dashboard.
If you see the 500 internal server error, please check Mautic logs, which can be found in /var/www/mautic/app/logs/
directory.
Step 7: Enable HTTP2 to Improve Performance
You can enable HTTP2 protocol to improve page loading performance for Mautic.
Apache
First, you need to enable the HTTP2 module.
sudo a2enmod http2
Then open the SSL virtual host file.
sudo nano /etc/apache2/sites-enabled/mautic-le-ssl.conf
Put the following directive after the opening <VirtualHost *:443>
tag.
Protocols h2 http/1.1
Save and close the file. Then restart Apache for the changes to take effect.
sudo systemctl restart apache2
Nginx
To enable HTTP2 protocol in Nginx virtual host, find the following line.
listen 443 ssl; # managed by Certbot
Simply add http2
after ssl
.
listen 443 ssl http2; # managed by Certbot
Save and close the file. Then reload Nginx.
sudo systemctl reload nginx
Step 8: Install the RSS To Email Plugin
For many site owners, the ability to automatically fetch content from RSS feed and send it to subscribers is a must. Mautic doesn’t support this feature natively, but you can install a plugin to implement this feature. The plugin costs $9.95. It’s a one-time payment. You will recieve free updates for life. Go to https://mauticapps.com/ to purchase.
After making a payment, you can download the plugin.
Then upload this plugin to the /var/www/mautic/plugins/
directory.
Next, go to the Mautic plugins directory.
cd /var/www/mautic/plugins/
Unzip the archive.
sudo unzip MauticRssToEmailBundle.zip
Clear the Mautic cache.
sudo -u www-data php7.4 /var/www/mautic/bin/console cache:clear
In the Mautic dashboard, click the gear icon on the upper-right corner and select plugins
. Click the Install/Upgrade plugins
button and the Mautic RSS to Email plugin will show up in the plugin list.
Step 9: Add Cron Jobs
Mautic relies on Cron jobs to update mailing list segments, email marketing campaigns, campaign events and process email queues. Edit the www-data user’s crontab file. (You should not add Mautic commands in root user’s crontab file.)
sudo -u www-data crontab -e
And add Mautic Cron jobs like below.
###### Mautic Cron Jobs ####### # update segments every 15 minutes * * * * * php7.4 /var/www/mautic/app/console mautic:segments:update > /dev/null # update campaigns every 15 minutes starting with an offset of 5 minutes at the beginning of each hour 5-59/15 * * * * php7.4 /var/www/mautic/app/console mautic:campaigns:update > /dev/null # execute campaigns events every 15 minutes with an offset of 10 minutes 10-59/15 * * * * php7.4 /var/www/mautic/app/console mautic:campaigns:trigger > /dev/null # process email queue 2-59/15 * * * * php7.4 /var/www/mautic/app/console mautic:emails:send > /dev/null # import list in the background * * * * * php7.4 /var/www/mautic/app/console mautic:import > /dev/null # fetch bounce messages @hourly php7.4 /var/www/mautic/bin/console mautic:email:fetch # update MaxMind GeoLite2 IP Database once a week @weekly php7.4 /var/www/mautic/app/console mautic:iplookup:download > /dev/null
Save and close the file. Note that Mautic cron jobs may use a fair amount of CPU and RAM resources. If Mautic and iRedMail are installed on a server with 2GB RAM, you should not deploy additional programs on the server, or you can choose to upgrade the server specs.
Step 10: Download IP Lookup Database
In order to know the subscriber’s geolocation, you need to download MaxMind’s free GeoLite2 IP lookup database.
First, you need to create an account at MaxMind. Maxmind will send you an email. Click the link in the email to set a password, then log in to your MaxMind account. Next, select My License Key
on the left bar.
Click the Generate New License Key button.
Give your license key a name. Then choose No
, because we don’t need to use the geoipupdate
program. Then click the Confirm
button.
Once the license key is created, copy the license key. Go to Mautic dashboard, click the cog icon on the upper right corner and select configuration
. In the System settings
tab, scroll down to Miscellaneous Settings
.
- Select Maxmind GeoLite2 City Download for the IP lookup service
- Paste your license key into the
IP lookup service authentication
field.
Next, Click the Fetch IP Lookup Data Store button. Finally, click the Apply button on the upper-right corner.
Step 11: Install the Tracking JavaScript
In the tracking settings
tab, you can find a code snippet that you can add to your website for tracking visitors. If you use WordPress, then copy this code snippet and paste it in the footer.php
file under the WordPress theme folder.
Note that you need to go to the System settings tab, and add your website’s address in the CORS settings for the tracking JavaScript to work.
While you are at it, you should also set the default timezone on this page.
Click the Apply button. Note: I found that I need to wait some time for the timezone setting to take effect. You can clear Mautic cache with the following command for the timezone setting to take effect immediately.
sudo rm /var/www/mautic/app/cache/* -rf
Importing Contacts to Mautic
Check out the Mautic contact import page. When importing contacts from a CSV file, you can choose the contact owner, contact segment, and tags. You can also match the CSV file column with the existing Mautic contact fields.
Please note that when importing a large list (more than one thousand contacts) to Mautic, you should choose import in the background instead of importing in the browser. That’s because the default PHP maximal execution time is 30 seconds, but importing a large list can take several minutes, so it will be stopped by the PHP limit if you choose to import in the browser.
If the importing process appears to be not making any progress then you can try importing it from the command line. It may give you some clue why it’s not making progress.
sudo -u www-data php7.4 /var/www/mautic/bin/console mautic:import
A column in the CSV file should not contain too many characters (no longer than 170 characters, I think), or the import can fail and the error “There was a database error: The EntityManager is closed” will be shown in the command line.
How to Update to the Latest Stable Version
When a new version of Mautic comes out, you will see a notification in the Mautic dashboard (Click the bell icon).
Then click the Update Now link. You will see the page below.
Note: If you are trying to upgrade to Mautic 3, but see the following error, then you need to upgrade your MariaDB version. You can install MariaDB 10.5 on Ubuntu.
You are advised to back up files and database before upgrading Mautic. To back up the Mautic files, simply run the following command, which will back up the /var/www/mautic/
directory to your home directory.
sudo tar -cpvzf ~/mautic.tar.gz /var/www/mautic/
To back up the Mautic database, run the following command, which will back up the database to your home directory.
sudo mysqldump -u root mautic > ~/mautic.sql
Next, click the Update Now button to update Mautic and you will see the progress.
If the update process stalls or failed partway through, please check out this article.
Update Mautic From Command Line
If the web-based updater failed, you may want to try updating Mautic from the command line, because you can see errors in the command line and troubleshoot the problem.
Go to the Mautic webroot directory.
cd /var/www/mautic/
Then run the following command to check if there’s update available.
sudo -u www-data php7.4 app/console mautic:update:find
If update is available, run the following command to apply updates.
sudo -u www-data php7.4 app/console mautic:update:apply
If you are asked:
Are you sure you wish to update Mautic to the latest version?
Type in yes
and press Enter
.
During the update, I saw the following error.
PHP Warning: Use of undefined constant PHPEXCEL_ROOT - assumed 'PHPEXCEL_ROOT' (this will throw an Error in a future version of PHP) in /var/www/mautic/vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/ZipArchive.php on line 31 PHP Warning: require_once(PHPEXCEL_ROOTPHPExcel/Shared/PCLZip/pclzip.lib.php): failed to open stream: No such file or directory in /var/www/mautic/vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/ZipArchive.php on line 31 PHP Fatal error: require_once(): Failed opening required 'PHPEXCEL_ROOTPHPExcel/Shared/PCLZip/pclzip.lib.php' (include_path='.:/usr/share/php') in /var/www/mautic/vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/ZipArchive.php on line 31
As you can see, this error is caused by an undefined constant PHPEXCEL_ROOT. To fix this error, I need to define the constant.
sudo nano /var/www/mautic/vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/ZipArchive.php
Find the following line,
require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/PCLZip/pclzip.lib.php';
And define the PHPEXCEL_ROOT constant above the line.
define("PHPEXCEL_ROOT", "/var/www/mautic/vendor/phpoffice/phpexcel/Classes/"); require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/PCLZip/pclzip.lib.php';
Save and close the file. Then run the update command again.
sudo -u www-data php7.4 app/console mautic:update:apply
How to Send Emails in Mautic
In Mautic, you can use 3 types of email campaigns:
- Automated campaign (for marketing automation)
- Manual campaign (broadcast emails to a whole segment)
- RSS campaign (If you installed the RSS to Email plugin)
In Mautic, there’s no such concept as an email list. You need to import contacts and groups them into segments.
How to Create an Automated Campaign (Marketing Automation)
- Go to the
Contacts
tab and import your contacts to Mautic. - Go to the
Segment
tab to create a segment - Add the contacts into the segment.
- Go to
Channels
->Email
and create the template emails that you want to send to subscribers. - Go to the
Campaigns
tab to create a campaign. The campaign builder allows you to create automated campaigns. Assign a segment to the campaign. - Publish the campaign and you are done. Wait for the Emails to be sent.
How to Create Manual Campaign (Broadcast Emails)
Go to Channels
-> Email
, click the New
button to create a new Segment Email.
- Segment Emails can be sent manually (broadcast)
- Template emails can not be sent manually. They are used with automated campaigns.
Once the segment email is created, you can click the send button to broadcast the emails to your subscribers.
How to Integrate with Twilio SMS Marketing
Twilio allows you to programmatically make and receive phone calls, send and receive text messages using its web service APIs. Go to Twilio.com to create an account (You will get $15.50 trial credit). Then go to Mautic Settings
-> Plugins
. Click the Install/Upgrade Plugins
button. The Twilio plugin will show up. Click on it. Then
- Change the published status from No to Yes.
- Enter your Twilio account SID
- Enter your Twilio Auth Token
- Go to your Twilio account to get a trial phone number, copy the number and paste it to the Sending Phone Number field in Mautic.
Click the Save & close
button. Now if you create a campaign in the campaign builder, you have the option to send SMS text messages.
And you have a new item called text messages
under the channels
tab.
Note that phone numbers stored in Mautic should have the + sign with the contact’s country code like +44. If there’s no + sign, Mautic will automatically add the US country code (+1).
How to Handle SMS Subscriptions
If you a user don’t want to receive your SMS messages, you need to allow the user to unsubscribe from your SMS campaign. This can be achieved via the Mautic SMS reader plugin. To install this plugin, run
cd /var/www/mautic/plugins/ sudo git clone https://github.com/nebev/mautic-sms-reader.git sudo mv mautic-sms-reader SmsreaderBundle
Clear the Mautic application cache.
sudo -u www-data php7.4 /var/www/mautic/bin/console cache:clear
Then go to Mautic Settings
-> Plugins
. Click the Install/Upgrade Plugins
button. The Smsreader
plugin will show up. Next, log out and log back in. You will see the Twilio SMS Reader
menu item in Settings. Enter your Twilio Account SID and the unsubscribe/re-subscribe keywords.
Automatic Bounce Handling
You can use the Monitored Inbox feature in Mautic to automatically remove email address from Mautic. Go to Mautic configuration
-> Email settings
-> Monitored Inbox
. Enter your mailbox login credentials, then test connection and fetch folders.
Once the connection is successful, you can select the folder to monitor for bounce messages. Note that you need to create the folder as a sub-foler of the main inbox
folder in your mailbox, otherwise you might see “the value is not valid
” error when selecting the folder to check. If you use the Roundcube webmail, you can go to the Roundcube settings
-> Folders
to create the sub folder (Inbox.bounces).
Then Mautic will allow you to choose the INBOX.bounces
as the folder to check. Click the Save and close
button. In Roundcube, you can create a filter to automatically put bounce messages into the Inbox.bounces folder. The filter rule is as follows:
- Subject contains “Undelivered Mail Returned to Sender”
- To contains “[email protected]”
Next, you can run the following command on your server, so Mautic can fetch the bounce messages from the mailbox.
sudo -u www-data php7.4 /var/www/mautic/bin/console mautic:email:fetch
This command is already in the Cron jobs, so you don’t have to run it manullay every day.
By default, bounced email addresses won’t be automatically remove from Mautic, but will be labeled as Do not Contact
, so Mautic won’t send emails to those addreses. If you want to remove them, you can create a segment called bounced emails
with the filter Bounce - Email equals Yes
.
Segment will be updated by Cron jobs.
Next, you can create a campaign in Mautic to automatically delete the contacts in the bounced email
segment.
Mautic PHP Console Commands
The Mautic Cron jobs are several PHP console commands. There are also other commands you might find useful. List available commands with:
sudo -u www-data php7.4 /var/www/mautic/bin/console
For example, you can update Mautic from the command line.
sudo -u www-data php7.4 /var/www/mautic/bin/console mautic:update:find sudo -u www-data php7.4 /var/www/mautic/bin/console mautic:update:apply
The console in a PHP web application is usually available as bin/console
, app/console
, or console.php
. Not every PHP web application provides console commands. The available commands are not the same for different web applications. For instance, some allow you to create users and reset passwords, while others may not allow you to do so.
Wrapping Up
I hope this tutorial helped you install Mautic on Ubuntu 18.04. You can also check out Mautic getting started guide to learn how to use it. As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks. Take care 🙂
Hi Xiao,
My Mautic doesnt work with “queued delivery”, only send imediatly and it isnt linked with Cron Job.
Some guys commented that they only solution is change PHP 7.3 to 7.0.
As I’ll try your great tutorial, I would like to know if your instlation works well with queued delivery.
Thanks man,
Yes, queued delivery works on my Mautic installation. If I remember correctly, Mautic doesn’t work well with PHP7.3. I’m using PHP7.2.
Hi Xiao, me again,
I followed your tutorial, but queued delivery doesnt work, neither tracking visits.
-All Cron Jobs configured
-Tracking script installed in body site
– VPS with 1cpu, 2Gb RAM, 30Gb disk, 2Tb band
-Ubuntu 18.04 LTS
-LEMP Stack and PHP 7.2.19 (following your tutorial)
Would you mind revise my installation? I give you all access and pay doble beer 🙂
I’d like to help you troubleshoot this problem. I just sent you an email.
Does Mautic support Reply-to option? Because we have multiple users send news letters or jobs opening emails to our subscribers. But If subscriber replies it should respond back to those whoever user send the emails.
There’s no options to change the Reply-to address, but each user can create a separate account in Mautic and have their own subscribers. Make sure you go to Mautic Configurations -> Email settings and enable the Mailer is owner feature, so the subscriber owner’s email address will be used as the From: address.
Hello Xiao,
Its me again. I am done with iredmail from your tutorial. And everything is working as it should.
Now I have proceeded to installing mautic on iredmail as you directed here. But after everything, I created a new MX record for ‘mautic.my-domain.com and gave it a priority of 5.
Then as I navigate to mautic.my-domain.com/installer the page is not showing anything.
Then I also found out that as I visit my-domain.com it redirects to my-domain.com/mail.
What should I do?
You don’t need to add MX record for mautic.your-domain.com. Mautic is not a mail server. It’s a mailing list manager.
You should not point your-domain.com to the IP address of your mail server, if your website is not hosted on your mail server.
I don’t have time to answer every question, If you followed this tutorial to the letter but can’t get Mautic installer working, I can install Mautic for you, if you are willing to pay me.
Hello,
I have been able to get past the errors and everything is going well now except that i am getting ‘500 internal server error’ after the step 2 of the mautic installation .
And i have checked my error log. And here is the error I am getting.
[2019-12-09 14:52:55] mautic.WARNING: PHP Warning – require(/var/www/mautic/app/cache/prod/doctrine/orm/Proxies/__CG__MauticUserBundleEntityRole.php): failed to open s$
[2019-12-09 14:52:55] mautic.ERROR: PHP Notice: require(): Failed opening required ‘/var/www/mautic/app/cache/prod/doctrine/orm/Proxies/__CG__MauticUserBundleEntityRol$
[2019-12-09 14:52:55] mautic.ERROR: Symfony\Component\Debug\Exception\FatalErrorException: Notice: require(): Failed opening required ‘/var/www/mautic/app/cache/prod/d$
[2019-12-09 14:52:55] mautic.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\FatalErrorException: “Compile Error: require(): Failed opening required$
Could you help out if you have some time to spare.
Sorry for bordering you. I have fixed it.
Hi Emeke,
How did you resolve this issue? It keeps happening.
Xiao Guoan Can you make tutorial on how to set dedicated ip in ubuntu 18.04 and how to setup ptr record also for ubuntu 18.04? Thanks
If you use a VPS, then you have a dedicated IP address and you can set PTR record in the control panel of your hosting provider.
What you said is true BUT… your tutorial doesnt involve installing any control panel whatsoever, it only use a fresh vps with ubuntu 18.04. and with no control panel in there you need a way to setup the dedicated ip and the rev dns + ptr record otherwise your email cant get into inbox, plus the package that you suggest with Scalahosting cant include the cpanel in there, cpanel with mautic plus modoboa 2gb ram is not enough. So can you make a tutorial on these 2 subjects?
1.) If you use VPS, then your VPS comes with a dedicated IP address. No other person can use your VPS’s IP address. You don’t need to do other things to get a dedicated IP address.
2.) Most VPS providers, including ScalaHosting, allows you to edit PTR record (aka reverse DNS record) in the account control panel (I don’t mean control panels like CPanel). If you read my article carefully, you would find that I showed how to set PTR record in ScalaHosting. https://www.linuxbabe.com/mail-server/email-server-ubuntu-18-04-modoboa#ptr-record
3.) There are many factors that affect your email deliverability. A dedicated IP address and PTR record can help, but they are not “silver bullets”. I recommend reading this article: How to Stop Your Emails Being Marked as Spam
4.) You don’t need CPanel to set PTR record.
Thank you for your reply Guoan, as of now i dont need to install cpanel in my vps because i believe its not necessary to install it when we are following your tutorial. About dedicated IP i need tutorial to install it because just incase my ip got blacklisted then i can replace it with a new IP. Can you make a tutorial about this? Im sure this will help many people also that face this problem
There’s no way to install, configure, or set up a new IP address in the operating system when you are using VPS.
You can create a snapshot of your VPS, then create a new VPS from the snapshot, so you have a new IP address. You can delete the old VPS after that.
If your IP address is blacklisted, you should ask for removal of your IP address from the blacklist. This will do good for your IP address reputation for the long term. If you suddenly change your IP address, your email could be put into the spam folder.
Changing IP address in case of being blacklisted makes me think that you are trying to spam and play the hide and seek game.
@Xiao Guoan (Admin) , Thanks for the wonderful tutorial. My question is on installing mautic on a already installed Iredmail server.
Can I use the already installed Let’s encrypt certificate on the iredmail server for the mautic host: mautic.domain.com? I use webroot and it does not work, and cannot use installer to install mautic, but can see the installer page, with no graphical mautic images.
Also am afraid if I use the nginx plugin as describe, it will alter the nginx installation for the mail server. I read where iremail never recommends this, but web root.
Should I go ahead and try Use the nginx plugin for mautic in iremail server? Thanks
@Xiao , Ok, never worry. I got it now. I installed a separate certificate for mautic using ngnix plug in and it works. It seems MAUTIC need an independent certificate to work
This worked perfectly. How can set up FTP/SFTP to this? I have NGINX/LEMP stack
I have an active email server running Modoboa 18.04; can I install Mautic on this server?
Yes, you can. However, this article needs an update. I will update this article tomorrow.
Hello Johnny, I just updated this Mautic tutorial.
Hi Xiao,
Thanks for the prompt personal attention; another excellent tutorial.
Hi Xiao,
I followed the tutorial with the iredmail installation and I have is running really well with SOGo. Mautic is installed and seems to be working, but I cannot send emails from the Mautic install.
Error log entry:
2020/09/25 20:18:18 [error] 23759#23759: *2243 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: [my ip], server: mautic.[my domain].com, request: “POST /s/contacts/email/2?mauticUserLastActive=1&mauticLastNotificationId= HTTP/2.0”, upstream: “fastcgi://127.0.0.1:9999”, host: “mautic.[my domain].com”, referrer: “https://mautic.[my domain].com/s/contacts”
I really appreciate all the tutorials. Very helpful!
Is there a way to get Feedback Loops rolling for Mautic?
Hi Xiao:
Your tutorials are helping me a lot so thank you. Wanted to submit a correction here though to pay it back a little.
In mautic.conf lines 30 and 40 have errors if you uncomment them you have to correct them to:
fastcgi_pass 127.0.0.1:9999;
otherwise you’ll get an error when you run
sudo nginx -t
I am trying to get Mautic setup with this after successfully setting up iredmail server on Ubuntu 18.04. However after I created mautic.conf and tried to go to the installer URL it was telling me the version of php installed was not correct. It was seeing the system default 7.2 even though 7.4 was successfully installed and available in alternatives. I was trying to change the default php version with no change in results so then I uninstalled php 7.2 and that led to bad gateway errors from nginx. I tried reinstalling php 7.2 and reloading nginx, but that did not return things to the previous state. How do I save this install?
thanks for the article.
step 10 the license key now is userid:license_key: https://docs.mautic.org/en/setup/maxmind-license
cron job path is different, the /app/console should be bin/console.
Why am I getting a 8.4/10 score when sending test email but I get 10/10 sending the same email from ireadmail inbox?