smtp4dev
AGENTS.md4k starsChanged 2 months agoBSD-3-ClauseView on GitHub
Always follow these instructions first and fallback to additional search and context gathering only if the information in the instructions is incomplete or found to be in error. smtp4dev is a fake SMTP email server for development and testing, built as a .NET 10.0 web application with a Vue.js 3 frontend. It provides SMTP, IMAP, and web interfaces for testing email functionality during development. NEVER CANCEL: All build and test commands can take significant time. Use appropriate timeouts. Development mode…
Trending
More talk lately.about the whole repository
Who's talking about rnwood/smtp4dev
- Stack Overflow“SMTP local server in windows 7? (running IIS7)”Stack Overflow · Jan 1, 2012 · 14 votes
- NixOS/nixpkgs“smtp4dev: init at 3.3.4”GitHub · Apr 2, 2024 · 4 reactions
- @bossett.social“I use github.com/rnwood/smtp4... for testing (but there are dozens like it) to avoid having to actually …”Bluesky · Nov 29, 2024 · 3 likes
- galaxyproject/galaxy“Add `email` notifications channel”GitHub · Apr 5, 2024 · 2 reactions
- testcontainers/testcontainers-dotnet“feat: added smtp4dev container”GitHub · Feb 18, 2025 · 1 reactions
The biggest 5 of 38 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 38
Talked about on GitHub, Bluesky and Stack Overflow (38 times).
On GitHub · 34
- Apr 2, 2024smtp4dev: init at 3.3.4 — NixOS/nixpkgs4 reactions · 16 comments
- Apr 5, 2024Add `email` notifications channel — galaxyproject/galaxy2 reactions · 9 comments
- Feb 18, 2025feat: added smtp4dev container — testcontainers/testcontainers-dotnet1 reaction · 1 comment
- Dec 23, 2024Add smtp4dev preset — orlangure/gnomock1 reaction · 4 comments
- Nov 3, 2026[catalog-candidate] smtp4dev-local-email-testing — ePlus-DEV/free-tier-hubsays it tested it0 reactions · 3 comments
29 more on GitHub
- Dec 25, 2025Use the smtp4dev web APIs to read e-mails, not the web UI (OSOE-1221) — Lombiq/UI-Testing-Toolbox0 reactions
- Dec 13, 2025smtp4dev: 3.11.0 -> 3.12.0 — NixOS/nixpkgs0 reactions · 2 comments
- Dec 6, 2025smtp4dev: 3.10.3 -> 3.11.0 — NixOS/nixpkgs0 reactions · 2 comments
- Nov 14, 2025Remove version: Rnwood.Smtp4dev.Desktop version 3.9.1-ci20250914121_pr1467 — microsoft/winget-pkgs0 reactions · 2 comments
- Nov 14, 2025Remove version: Rnwood.Smtp4dev.Desktop version 3.9.1-ci20250914114 — microsoft/winget-pkgs0 reactions · 2 comments
- Nov 14, 2025Remove version: Rnwood.Smtp4dev.Desktop version 3.9.1-ci20250914115 — microsoft/winget-pkgs0 reactions · 2 comments
- Sep 30, 2025smtp4dev: 3.10.2 -> 3.10.3 — NixOS/nixpkgs0 reactions · 2 comments
- Sep 24, 2025smtp4dev: 3.10.1 -> 3.10.2 — NixOS/nixpkgs0 reactions · 2 comments
- Sep 15, 2025smtp4dev: 3.9.0 -> 3.10.1 — NixOS/nixpkgs0 reactions · 1 comment
- Sep 2, 2025smtp4dev: 3.8.6 -> 3.9.0, add version check — NixOS/nixpkgs0 reactions · 2 comments
- Jun 14, 2025smtp4dev Desktop — nils-a/au-packages0 reactions
- May 1, 2025Update Request: smtp4dev 3.6.1 → 3.8.6 — NixOS/nixpkgs0 reactions · 1 comment
- Feb 18, 2025feat: added smtp4dev container — testcontainers/testcontainers-dotnet0 reactions · 2 comments
- Dec 30, 2024Add integration tests — WATonomous/terraform-provider-email0 reactions · 1 comment
- Oct 1, 2024smtp4dev: 3.3.4 -> 3.6.1 — NixOS/nixpkgs0 reactions · 1 comment
- Sep 18, 2024HPCC-32678 Add support for TLS communication to Std.System.Email.SendEmail() — hpcc-systems/HPCC-Platform0 reactions · 9 comments
- Feb 21, 2024[question] client config when calling inside of docker — domodwyer/mailyak0 reactions · 2 comments
- Nov 28, 2023Feature: Send user invite — umbraco/Umbraco.CMS.Backoffice0 reactions
- Oct 26, 2023feat: submissions api — didx-xyz/ssi-trust-registry0 reactions
- Apr 9, 2023Add winner select and email notifications — jusrus01/K2890 reactions
- Aug 22, 2022Upgrade to PHP 8.1 — kodus/mail0 reactions
- Sep 11, 2021feat (CustomAuth): Provide ability to set a list of Auth mechanisms when configuring the server — rnwood/smtpserver0 reactions · 1 comment
- Sep 11, 2021[Feature] Ability to set a list of valid Auth Mechanisms when constructing the SmtpServer — rnwood/smtpserver0 reactions · 1 comment
- Aug 12, 2021Email e Senha exposto — GustavoPaggiatto/AsyncChallenge0 reactions
- May 25, 2021Test Send Email — MicroservicesBuffet/Email0 reactions
- May 20, 2021Fix `/email` to view sent emails in development and staging — building-envelope-data/metabase0 reactions · 3 comments
- Mar 8, 2021ADX-619 Add local fake SMTP server, add missing ERROR EMAIL variables — fjelltopp/adx_develop0 reactions · 1 comment
- Nov 8, 2020[Web] Using a mock SMTP server if in Development Environment — CrithinkSolutions/CriThink0 reactions
- Mar 6, 2018[MacOSX] SmtpCommandException: ITMIME — jstedfast/MailKit0 reactions · 1 comment
On Bluesky · 2
- Nov 29, 2024I use github.com/rnwood/smtp4... for testing (but there are dozens like it) to avoid having to actually have SMTP — @bossett.socialsays it tested it3 likes and reposts · 1 reply
- Nov 29, 2024smtp4dev perhaps? shows the received mail in a reasonably convenient little weubi github.com/rnwood/smtp4.... preconfigured compose file as… — @jade.gf1 likes and repost
On Stack Overflow · 2
- Jan 1, 2012SMTP local server in windows 7? (running IIS7)14 votes
- Apr 4, 2017How to create an autosend email in vb.net?0 votes
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,439 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
The file
We split this AGENTS.md into the rules it gives an agent
11 rules. About 0 are common, 10 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 24
NEVER CANCEL - Set timeout to 120+ seconds
- Distinctive: line 109
Verify the email appears in the Messages tab
- Distinctive: line 111
Test the Sessions tab to see SMTP session logs
- Distinctive: line 149
Always run validation scenarios: after changes
- Distinctive: line 150
Test both development and published modes
- Very specific: line 159
Default configuration in appsettings.json with extensive inline documentation
- Distinctive: line 206
Use imperative mood ("add" not "added" or "adds")
- Distinctive: line 207
Keep descriptions concise but descriptive
- Distinctive: line 208
Don't end with a period
- Distinctive: line 210
Avoid technical jargon; focus on the functional benefit or problem solved
- Distinctive: line 222
Port conflicts: Use non-standard ports (2525 for SMTP, 1143 for IMAP, 5001+ for web)
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
smtp4dev Development Instructions
Always follow these instructions first and fallback to additional search and context gathering only if the information in the instructions is incomplete or found to be in error.
smtp4dev is a fake SMTP email server for development and testing, built as a .NET 10.0 web application with a Vue.js 3 frontend. It provides SMTP, IMAP, and web interfaces for testing email functionality during development.
Working Effectively
Prerequisites and Dependencies
- .NET 10.0 SDK
- Node.js 20+ and npm 10+ (tested with Node.js 20.19.4, npm 10.8.2)
- Git
- Optional: Chrome/Chromium for E2E tests
Bootstrap, Build, and Test Repository
NEVER CANCEL: All build and test commands can take significant time. Use appropriate timeouts.
- Restore .NET dependencies:
dotnet restore- Takes approximately 40-60 seconds
- NEVER CANCEL - Set timeout to 120+ seconds
- Build the application:
# Build main web application (recommended for development) dotnet build Rnwood.Smtp4dev/Rnwood.Smtp4dev.csproj- Takes approximately 3-5 seconds after initial frontend build
- NEVER CANCEL - Set timeout to 60+ seconds
- The Desktop project will fail on Linux (expected - Windows-only)
Run the Application
Development mode (with live reload):
dotnet run --project Rnwood.Smtp4dev/Rnwood.Smtp4dev.csproj --urls="http://localhost:5000" --smtpport=2525 --imapport=1143Published mode:
dotnet publish Rnwood.Smtp4dev/Rnwood.Smtp4dev.csproj -c Release -o ./published
cd ./published
./Rnwood.Smtp4dev --urls="http://localhost:5000" --smtpport=2525 --imapport=1143Key startup arguments:
--urls: Web interface URL (default: http://localhost:5000)--smtpport: SMTP server port (default: 25, use 2525 for development)--imapport: IMAP server port (default: 143, use 1143 for development)--help: Full list of command-line options
The application serves:
- Web UI at the specified URL (e.g., http://localhost:5000)
- SMTP server on the specified port
- IMAP server on the specified port
- API endpoints at
/api/messages,/api/sessions, etc.
Testing
Unit and Integration Tests:
# SMTP Server library tests
dotnet test smtpserver/Rnwood.SmtpServer.Tests -c Release- Takes approximately 20-30 seconds
- NEVER CANCEL - Set timeout to 60+ seconds
- Some IPv6-related test failures are expected in CI environments
Frontend Linting:
cd Rnwood.Smtp4dev/ClientApp
npm run lint- Takes approximately 10-15 seconds
- Some configuration warnings are expected
Validation Scenarios
ALWAYS manually validate changes with these scenarios:
- Basic SMTP Functionality:
# Send a test email via SMTP cat > /tmp/test_email.txt << 'EOF' HELO localhost MAIL FROM: <test@example.com> RCPT TO: <user@example.com> DATA Subject: Test Email From: test@example.com To: user@example.com This is a test email to validate smtp4dev functionality. . QUIT EOF nc localhost 2525 < /tmp/test_email.txt - Web UI Functionality:
- Navigate to http://localhost:5000
- Verify the email appears in the Messages tab
- Click on the email to view details
- Test the Sessions tab to see SMTP session logs
- API Functionality:
# Check messages API curl -s http://localhost:5000/api/messages | jq '.' # Check sessions API curl -s http://localhost:5000/api/sessions | jq '.'
Project Structure
Key Projects
Rnwood.Smtp4dev/- Main web application (ASP.NET Core + Vue.js)Rnwood.Smtp4dev.Tests/- Unit and E2E testsRnwood.Smtp4dev.Desktop/- Desktop application (Windows only)smtpserver/Rnwood.SmtpServer/- SMTP server libraryimapserver/New.LumiSoft.Net/- IMAP server library
Important Files
Rnwood.Smtp4dev/appsettings.json- Main configuration with extensive documentationRnwood.Smtp4dev/ClientApp/package.json- Frontend dependencies and scriptsazure-pipelines.yml- CI/CD pipeline configurationRnwood.Smtp4dev/ClientApp/vite.config.js- Frontend build configurationdocs/- Documentation for users
Frontend Structure
- Built with Vue.js 3, TypeScript, and Vite
- Located in
Rnwood.Smtp4dev/ClientApp/ - Uses Element Plus UI components
- Build output goes to
Rnwood.Smtp4dev/wwwroot/
Development Workflow
Making Changes
- Always build and test first to establish a baseline
- Make minimal, focused changes
- Always run validation scenarios after changes
- Test both development and published modes
Full Stack Development
dotnet watch run --project Rnwood.Smtp4dev/Rnwood.Smtp4dev.csprojBoth the front end and backend will reload on changes.
Configuration
- Default configuration in
appsettings.jsonwith extensive inline documentation - User configuration stored in
~/.config/smtp4dev/appsettings.jsonon Linux - Environment variables: Use
ServerOptions__PropertyNameformat - Command line arguments: Use
--propertyname=valueformat
Pull Request Requirements for AI Agents
MANDATORY: All pull requests must have titles that follow the Conventional Commits specification.
Required Format
type(optional-scope): descriptionValid Types for smtp4dev
feat: New features (e.g.,feat: add IMAP search functionality)fix: Bug fixes (e.g.,fix(smtp): resolve memory leak in session handling)docs: Documentation changes (e.g.,docs: update API documentation)refactor: Code refactoring (e.g.,refactor(api): simplify message endpoint logic)test: Test additions/fixes (e.g.,test: add unit tests for email parsing)chore: Maintenance tasks (e.g.,chore(deps): update npm dependencies)ci: CI/CD changes (e.g.,ci: add conventional commit validation)build: Build system changes (e.g.,build: update .NET SDK to 8.0.119)perf: Performance improvements (e.g.,perf: optimize message list rendering)style: Code style changes (e.g.,style: fix linting issues)
Examples for Common Tasks
- Adding new functionality:
feat(web): add dark mode toggle(focuses on user feature, not technical implementation) - Fixing bugs:
fix(smtp): handle malformed email headers gracefully(describes the problem solved) - Updating documentation:
docs(api): add examples for message endpoints(describes what users gain) - Dependency updates:
chore(deps): update Vue.js to latest version - CI improvements:
ci: add automated security scanning
Examples of Good vs Poor Titles
✅ Good (user-focused):
feat: enable email filtering by date rangefix: prevent email list from freezing on large messagesdocs: add troubleshooting guide for connection issues
❌ Poor (technical-focused):
feat: implement DateRange component with Vue3 composition APIfix: refactor MessageService.GetMessages() method to use async patternsdocs: update API.md file with new endpoint documentation
AI Agent Guidelines
- Focus on user impact: Describe what the change does for users from a functional perspective, not technical implementation details
- Always use lowercase after the type: The description must start with a lowercase letter (e.g.,
fix: resolve issuenotfix: Resolve issue) - Use imperative mood ("add" not "added" or "adds")
- Keep descriptions concise but descriptive
- Don't end with a period
- Include scope when the change affects a specific component
- Avoid technical jargon; focus on the functional benefit or problem solved
- The GitHub Actions workflow will automatically validate PR titles
Common Issues and Solutions
Build Issues
- Desktop project fails on Linux: Expected - it's Windows-only
- NPM peer dependency warnings: Expected and harmless
- Sass deprecation warnings: Expected with current Vite/Sass versions
- Large chunk size warnings: Expected due to comprehensive frontend dependencies
Runtime Issues
- Port conflicts: Use non-standard ports (2525 for SMTP, 1143 for IMAP, 5001+ for web)
- IPv6 test failures: Expected in some CI environments
- Database locks: Application creates SQLite database in user config directory
Testing Issues
- E2E test complexity: Requires Chrome and specific environment setup
- Network-dependent tests: May fail in restricted environments
Integration with CI/CD
The project uses Azure Pipelines (azure-pipelines.yml) with:
- Multi-platform builds (Windows, Linux, macOS)
- Docker image creation
- NuGet package publishing
- GitHub releases
Build matrix includes:
win-x64,linux-x64,linux-musl-x64,linux-arm,win-arm64- Desktop variants (Windows only)
- Docker images (Linux and Windows)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

