MailCatcher is a Ruby gem that acts as a sendmail/postfix replacement and displays outgoing emails in a friendly web GUI. It is useful if you want to run someone else’s code and be sure of what emails are being sent.
Here’s how to use it with PHP and Laravel Homestead.
1. We need to access the website created by MailCatcher which is available on a custom port. ON your host machine, edit
1080 => 1080 to the default_ports section.
You’ll need to re-provision the Homestead box with:
homestead reload --provision (this will re-read the settings and apply the additional port mapping).
You will also need to add a line to your hosts file to map the URL to IP Address. Edit /etc/hosts and add something like this
2. Access the guest machine via SSH and install MailCatcher:
sudo apt-get update sudo apt-get install ruby-dev sudo gem install mailcatcher
3. Edit the PHP configuration
/etc/php/7.0/fpm/php.ini to change the sendmail path.
sendmail_path = "/usr/bin/env /usr/local/bin/catchmail -f email@example.com"
Note that the -f must be included for it to send if you aren’t specifying a from address yourself.
Restart PHP FPM with
sudo service php7.0-fpm restart.
4. Run MailCatcher with:
mailcatcher --foreground --http-ip=0.0.0.0
Now any emails your PHP code tries to send will be caught by MailCatcher and displayed at: http://mailcatcher.app
This article uses Homestead 0.5 which runs PHP 7. I’m not sure if more recent versions will work but give it a try and let me know in the comments.
Update 28/09/17 this also works with Homestead 3 running PHP 7.1.
Homestead 3 comes with MailHog preinstalled but this can’t render embedded images in emails whereas MailCatcher can. Follow the instructions above but you’ll need to run
sudo service mailhog stop before you can start MailCatcher.
Running on boot
[Unit] Description=Ruby MailCatcher Documentation=http://mailcatcher.me/ [Service] # Ubuntu/Debian convention: EnvironmentFile=-/etc/default/mailcatcher Type=simple ExecStart=/usr/local/bin/mailcatcher --foreground --ip 220.127.116.11 # (use whatever your server ip is) [Install] WantedBy=multi-user.target
systemctl enable mailcatcher.service to set the service to be auto-started at boot
systemctl start mailcatcher.service to start the service manually
systemctl status mailcatcher.service to see the service status