[HOW TO] Use msmtp to send email

Share your awesome tips and tricks here.
Post Reply
Mechano
Posts: 25
youtube meble na wymiar Warszawa
Joined: Wed Mar 12, 2014 7:34 am

[HOW TO] Use msmtp to send email

Post by Mechano »

Here a small how to for sending email both from shell and from PHP using the smtp client msmtp.
It's for ADM <= v2.1.

At first you have to install from App Center the Optware ipkg.
After, enter the shell with root user and give the command:

Code: Select all

ipkg install msmtp
Configuring msmtp for use with Gmail and Yahoo

Create or edit the msmtp configuration file in the user’s home directory.
Remember that every user needs to send email must have it's own .msmtprc
Use vi editor:

Code: Select all

vi ~/.msmtprc
With the following lines you configure msmtp for both Gmail and Yahoo:

Code: Select all

account yahoo
tls on
tls_starttls off
auth on
host smtp.mail.yahoo.com
user user
from user@yahoo.com
password ******
tls_trust_file /etc/ssl/certs/ca-certificates.crt

account gmail
tls on
auth on
host smtp.gmail.com
port 587
user user@gmail.com
from user@gmail.com
password ******
tls_trust_file /etc/ssl/certs/ca-certificates.crt
It's important the line tls_trust_file, the Asustor NAS have already this file and there are already some certificates for the main services.
If you're going to use a not listed provider, you've to find the authority certificate and add into the file /etc/ssl/certs/ca-certificates.crt
or another file to specify into the option tls_trust_file.

To protect passwords give read access only to the owner:

Code: Select all

chmod 600 ~/.msmtprc
Now we can create the mail body message:

Code: Select all

vi test_email
and fill with:

Code: Select all

From: Bob <bob@example.com>
To: Jane <jane@domain.com>
Subject: Hello Jane
Test email sent with msmtp
Now we can test email sending with the command:

Code: Select all

cat test_email | msmtp -a yahoo jane@domain.com
It's useful to send email from shell scripts when we want to automate certain process into cron and we need to send a feedback.

Now let's configure for use with PHP Mail() function.

Use vi to create the file:

Code: Select all

vi /volume0/usr/builtin/etc/php5/apache2/msmtprc
And fill it like in the previous example.
Protect with right access:

Code: Select all

chmod 600 msmtprc
and change the owner in accord with the ones that runs the process apache2
find with:

Code: Select all

ps -ef | grep apache2

 9916 root      0:00 /usr/builtin/sbin/apache2 -k start
 9918 admin      0:00 /usr/builtin/sbin/apache2 -k start
there're different instances of apache with root and admin, but you use admin user only if it doesn't work change to root:

Code: Select all

chown admin msmtprc
now edit the file php.ini:

Code: Select all

vi /volume0/usr/builtin/etc/php5/apache2/php.ini
and find sendmail_path option to change like this (change yahoo with gmail or whatever in accord with the account name into msmtprc file:

Code: Select all

sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -a yahoo -t"
Finally you can try your php code:

Code: Select all

<?php
   mail("jane@domain.com","Hello World","Email sent using PHP via msmtp");
?>
If you are hosting a CMS like Joomla! or Wordpress they have their builtin function for GMail or Yahoo! smtp server, check CMS documentation for how to set.
Last edited by Mechano on Tue Mar 18, 2014 9:58 pm, edited 2 times in total.
User avatar
orion
Posts: 3485
Joined: Wed May 29, 2013 11:09 am

Re: [HOW TO] Use msmtp to send email

Post by orion »

Great! Thanks for sharing.
Post Reply

Return to “Tips & Tricks”