Public | Automated Build

Last pushed: a year ago
Short Description
SMTP Server + Web Interface for viewing and testing emails during development.
Full Description


MailDev is a simple way to test your project's generated emails during development with an easy to use web interface that runs on your machine built on top of Node.js.

Install & Run

$ npm install -g maildev
$ maildev

If you want to use MailDev with Docker, you can use the
djfarrelly/maildev image on Docker Hub.
For a guide for usage with Docker,
checkout the docs.

$ docker run -p 1080:80 djfarrelly/maildev

For convenient use with Grunt, try grunt-maildev.


maildev [options]

  -h, --help                    output usage information
  -V, --version                 output the version number
  -s, --smtp <port>             SMTP port to catch emails [1025]
  -w, --web <port>              Port to run the Web GUI [1080]
  --ip <ip address>             IP Address to bind services to []
  --outgoing-host <host>        SMTP host for outgoing emails
  --outgoing-port <port>        SMTP port for outgoing emails
  --outgoing-user <user>        SMTP user for outgoing emails
  --outgoing-pass <pass>        SMTP password for outgoing emails
  --outgoing-secure             Use SMTP SSL for outgoing emails
  --auto-relay                  Use auto relay mode
  --auto-relay-rules <file>     Filter rules for auto relay mode
  --incoming-user <user>        SMTP user for incoming emails
  --incoming-pass <pass>        SMTP password for incoming emails
  --web-ip <ip address>         IP Address to bind HTTP service to, defaults to --ip
  --web-user <user>             HTTP basic auth username
  --web-pass <pass>             HTTP basic auth password
  -o, --open                    Open the Web GUI after startup
  -v, --verbose


MailDev can be used in your Node.js application. For more info view the
API docs.

var MailDev = require('maildev');

var maildev = new MailDev();


maildev.on('new', function(email){
  // We got a new email!

MailDev also has a REST API. For more info
view the docs.

Outgoing email

Maildev optionally supports selectively relaying email to an outgoing SMTP server. If you configure outgoing
email with the --outgoing- options you can click "Relay" on an individual email to relay through MailDev out
to a real SMTP service that will
actually* send the email to the recipient.


$ maildev --outgoing-host \
          --outgoing-secure \
          --outgoing-user '' \
          --outgoing-pass '<pass>'

Auto relay mode

Enabling the auto relay mode will automatically send each email to it's recipient
without the need to click the "Relay" button mentioned above.
The outgoing email options are required to enable this feature.

Additionally, you can pass a valid json file with additional configuration for
what email addresses you would like to allow or deny. The last matching
rule in the array will be the rule MailDev will follow.


$ maildev --outgoing-host \
          --outgoing-secure \
          --outgoing-user '' \
          --outgoing-pass '<pass>' \
          --auto-relay \
          --auto-relay-rules file.json

Rules example file:

    { "allow": "*" },
    { "deny":  "*" },
    { "allow": "" },
    { "deny":  "*" },
    { "allow": "" }

This would allow `,,, but`.

Configure your project

Configure your application to send emails via port 1025 and open localhost:1080 in your browser.

Nodemailer (v1.0+)

var transport = nodemailer.createTransport({
  port: 1025,
  ignoreTLS: true,
  // other settings...

Nodemailer (v0.7)

var transport = nodemailer.createTransport("SMTP", {
  port: 1025,
  // other settings...

Django -- Add EMAIL_PORT = 1025 in your settings file [source]

Rails -- config settings:

config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
        :address => "localhost",
        :port => 1025

Drupal -- Install and configure SMTP module or use a library like SwiftMailer.


  • Toggle between HTML, plain text views as well as view email headers
  • Test Responsive Emails w/ resizeable preview pane available for 320/480/600px screen sizes
  • Ability to receive and view email attachments
  • Websockets keep the interface in sync once emails are received
  • Command line interface for configuring SMTP and Web interface ports
  • Ability to relay email to an upstream SMTP server


If you're using MailDev and you have a great idea, I'd love to hear it. If you're not using MailDev because it lacks a feature, I'd love to hear that too. Add an issue to the repo here or contact me on twitter.


Any help on MailDev would be awesome. There is plenty of room for improvement. Feel free to create a Pull Request from small to big changes.

To run MailDev during development:

# grunt-cli is needed by grunt; ignore this if already installed
npm install -g grunt-cli
npm install
grunt dev

The grunt dev task will run the project using nodemon and restart automatically when changes are detected. SASS files will be compiled automatically on save also. To trigger some emails for testing run node test/send.js in a separate shell. Please run jshint to your lint code before submitting a pull request; run grunt jshint.

To run the test suite:

$ npm run test



MailDev is built on using great open source projects including Express, AngularJS, Font Awesome and two great projects from Andris Reinman: Simple SMTP and Mailparser. Many thanks to Andris as his projects are the backbone of this app and to MailCatcher for the inspiration.

Additionally, thanks to all the awesome contributors
to the project.



Docker Pull Command
Source Repository