Any modern website needs a few dialogues were users can either subscribe to a newsletter or they get a contact form to a send a request directly from that page.
There are thousands of free scripts available which are all using the PHP mail() function.
PHP mail() uses the program indicated in the ‘sendmail_path’ in php.ini. On Debian Jessie you can find php.ini under
Now using your own linux server to send e-mail is not necessarily a wise idea and there are many constraints. You need to set up DKIM keys and you have to patch your server quite often to ensure the e-mails send by “your” server will not be flagged as spam my most professional e-mail providers.
It’s far better to use an external SMTP server. Below I will show how to set this up on A Debian Linux and with fastmail.com as the provider:
First we should update our apt-repository and we should ensure that everything is updated to the latest and created. Next we will download and install MSMTP as the program to communicate from our Linux distribution to an external SMTP provider.
apt-get install msmtp
Configuration of MSMTP
Every user has an own configuration file under ~/.msmtprc .
Edit your own configuration with your editor of choice. I’m using vi(m):
The file should like the following (you have of course to edit your username and credentials – the account “name” can be anything you want, we are using fastmail in this example):
MSMTP doesn’t work if this file has rights higher than 600. This is a security measure, as the file contains the password and as such it has to be readable strictly by the owner only.
chmod 600 ~/.msmtprc
Now you have to create an email test file, as we want to check if things are working well. Create in any folder of your choice a file called ’email_test.txt’. It should contain something like the following.
From: Tim Cook <firstname.lastname@example.org>
To: Jeannot <email@example.com>
Subject: Testing our external SMTP Server Access
This email was sent using MSMTP via Fastmail SMTP server.
In the next step we will launch msmtp in debug-mode. “fastmail” stands for whatever name you gave your account above. If you used a different account name, this has to get changed in the below line as well. The email address ‘firstname.lastname@example.org’ needs to get replaced by one of your email addresses to check if things are running correctly.
cat email_test.txt | msmtp --debug -a fastmail email@example.com
Due to the debugging flag, you will get a rather long report, which might help you, in case things are not running properly. If you the test e-Mail, all is working just fine.
ignoring system configuration file /etc/msmtprc: No such file or directory
loaded user configuration file /root/.msmtprc
using account fastmail from /root/.msmtprc
host = mail.messagingengine.com
port = 465
timeout = off
protocol = smtp
domain = localhost
auth = choose
user = firstname.lastname@example.org
password = *
passwordeval = (not set)
ntlmdomain = (not set)
tls = on
tls_starttls = off
tls_trust_file = (not set)
tls_crl_file = (not set)
tls_fingerprint = (not set)
tls_key_file = (not set)
tls_cert_file = (not set)
tls_certcheck = off
tls_force_sslv3 = off
tls_min_dh_prime_bits = (not set)
tls_priorities = (not set)
auto_from = off
maildomain = (not set)
from = email@example.com
dsn_notify = (not set)
dsn_return = (not set)
keepbcc = off
logfile = (not set)
syslog = (not set)
aliases = (not set)
reading recipients from the command line
TLS certificate information:
Common Name: *.messagingengine.com
Organization: FastMail Pty Ltd
State or Province: Victoria
Common Name: DigiCert SHA2 High Assurance Server CA
Organization: DigiCert Inc
Organizational unit: www.digicert.com
Activation time: Tue Apr 8 00:00:00 2014
Expiration time: Fri Dec 30 12:00:00 2016
AUTH PLAIN AGplYW5ub3QubXVsbGVyQHJhbWdhZC5jb20AOG5EZGNDRHYzWkFiaG9RZlVha0VGaUVk
--> RCPT TO:<firstname.lastname@example.org>
-- 354 End data with <CR><LF>.<CR><LF>
--> From: Tim Cook <email@example.com>
--> To: Jeannot <firstname.lastname@example.org>
--> Subject: Testing our external SMTP Server Access
--> This email was sent using MSMTP via Fastmail SMTP server.
Configuration of PHP
Now that our test e-Mail was successfully sent, we have to tell PHP what to do, in case PHP mail() is getting called by any script.
First we have to copy “our” working configuration to the system-wide folder:
cp -p ~/.msmtprc /etc/.msmtp_php
Next we have to change the ownership to the one used by Apache2.
chown www-data:www-data /etc/.msmtp_php
Finally we have to edit our php.ini file:
Search for the sendmail_path = line. Ensure that any leading ‘;” will be deleted and change the path to:
sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a fastmail -t"
(here again, ‘fastmail’ stands for the name of the account you defined above. If you used a different name, you have to change it here as well).
Last but not least, we have to create the appropriate empty log files on our own:
chown www-data:www-data /var/log/msmtp.log
Now all we have to do, is restarting our Apache2 Server and we are good to go:
/etc/init.d apache2 restart