Running MailDev as a Local Mail Server with Docker
Running MailDev in Docker to capture and inspect outgoing mail locally, without a real inbox involved.
Setting Up MailDev with Docker
Create a Dockerfile using the example below.
FROM node:14-alpineEXPOSE 1080EXPOSE 1025RUN npm i -g maildevCMD ["maildev"]MailDev uses the following ports:
1080for the management console.1025for SMTP.
These ports can be changed with MailDev command-line options.
Create a docker-compose.yml file with the following content:
version: '3'services: mail: container_name: mail build: ./ ports: - "1080:1080" - "1025:1025"Bring up the container:
docker-compose up -d mailOnce the container is running, open http://localhost:1080 in a browser to access the MailDev management console.
The console displays and manages messages sent to the MailDev server.

Testing Email Functionality
If you’re using Windows, you can send test emails using the PowerShell Send-MailMessage command. Here’s an example:
Send-MailMessage ` -from 'dev@localhost' ` -to 'dev.to@localhost' ` -subject 'Test Subject' ` -body 'This is a test email.' ` -smtpServer 'localhost' ` -port 1025After sending the email, open the MailDev management console and verify that the message was received.

Conclusion
A Docker container running MailDev can capture and display outgoing email without using a real inbox.
MailDev exposes an SMTP listener on port 1025 and a web console on port 1080. Configure the application to use localhost:1025 as its SMTP server, then inspect captured messages in the browser.
This setup is useful for testing password resets, notifications, and other email-related behavior locally. MailDev captures messages instead of delivering them, so use it only in development and test environments.
Related posts
Building and Deploying Greengrass Components in a Dockerized Environment
Develop AWS IoT Greengrass components locally using the Greengrass Core Docker image.
Improving Cross-Team Communication with C4 Diagrams
Learn the characteristics of the C4 model, how it differs from UML and infrastructure diagrams, and how to communicate architecture at the right level for each role.
Sign in with Slack Using Cognito User Pools and OIDC
Federating Cognito user pools with Slack over OIDC and wiring "Sign in with Slack" into a Next.js app with Amplify.
Deploying FastAPI on AWS Lambda with Lambda Web Adapter
Containerizing a FastAPI backend and deploying it to a single Lambda function with Lambda Web Adapter and AWS CDK.
API Gateway WebSocket: Implementing a Mock Integration
Building an API Gateway WebSocket API entirely with mock integrations, returning canned responses with no backend Lambda involved.
