You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- MkDocs Material site deployed to www.papercut-smtp.com via GitHub Pages
- New guides: How It Works, Getting Started, Send Email from Your App
(multi-language examples), Desktop, Service, Docker, TLS, Troubleshooting
- README reduced to pitch + install + links into the docs site
[](https://github.com/ChangemakerStudios/Papercut-SMTP/actions/workflows/build.yml)
If you ever send emails from an application or website during development, you're familiar with the fear of an email being released into the wild. Are you positive none of the 'test' emails are addressed to colleagues or worse, customers? Of course, you can set up and maintain a test email server for development -- but that's a chore. Plus, the delay when waiting to view new test emails can radically slow your development cycle.
8
+
Papercut SMTP is a 2-in-1 quick email viewer **and** built-in SMTP server for development. Point your application at `localhost:25` and every email it sends is caught, displayed instantly, and **never delivered anywhere** — body, HTML, headers, attachments, and raw bits included.
Papercut SMTP is a 2-in-1 quick email viewer AND built-in SMTP server (designed to receive messages only). Papercut SMTP doesn't enforce any restrictions on how you prepare your email, but it allows you to view the whole email-chilada: body, HTML, headers, and attachment right down to the naughty raw encoded bits. Papercut can be configured to run on startup and sit quietly (minimized in the tray) only providing a notification when a new message has arrived.
13
-
14
-
## Download Desktop App Now
15
-
#### Download the 64-bit [PapercutSMTP-win-X64-stable-Setup.exe](https://github.com/ChangemakerStudios/Papercut-SMTP/releases) desktop installer in releases.
16
-
#### Download the 32-bit [PapercutSMTP-win-x86-stable-Setup.exe](https://github.com/ChangemakerStudios/Papercut-SMTP/releases) desktop installer in releases.
17
-
18
-
**For installation options, command-line parameters, and silent/unattended installation instructions, see the [Installation Guide](installation/README.md).**
19
-
20
-
## Requirements
21
-
Papercut SMTP UI Requires the "WebView2" Microsoft shared system component to be installed on your system. If you have any problems getting it running go to this site:
22
-
[WebView2 Download](https://developer.microsoft.com/en-us/microsoft-edge/webview2) and install it.
23
-
24
-
## Features
25
-
#### Instant Feedback When New Email Arrives
26
-

27
-
#### Rich and Detailed View of Received Email
28
10

29
-
#### View and Download the Mime Sections of your Email
30
-

Papercut SMTP has an optional HTTP server to receive emails even when the client is not running.
38
-
It can be run in an almost portable way by downloading [Papercut.Smtp.Service.*.zip](https://github.com/ChangemakerStudios/Papercut-SMTP/releases), unzipping, and installing as a Windows Service.
39
-
40
-
### Papercut SMTP Web UI
41
-
42
-
The service includes a built-in web interface for viewing received emails in your browser (default: **http://localhost:8080**):
43
-
44
-

45
-

46
-
47
-
### Installing Papercut SMTP Service
48
11
49
-
1.**Download** the appropriate [Papercut.Smtp.Service.*.zip](https://github.com/ChangemakerStudios/Papercut-SMTP/releases) for your system (win-x64 or win-x86)
50
-
2.**Extract** the zip file to your desired location
51
-
3.**Run the installation script** (requires administrator privileges):
docker run -d -p 37408:8080 -p 2525:2525 changemakerstudiosus/papercut-smtp:latest
17
+
winget install ChangemakerStudios.Papercut-SMTP
68
18
```
69
19
70
-
Access at: **http://localhost:37408** | Send emails to: **localhost:2525**
71
-
72
-
> **Note:** Docker uses non-privileged ports by default (SMTP: 2525, HTTP: 8080). See the [Service README](src/Papercut.Service/Readme.md#option-3-run-in-docker) for configuration options, Docker Compose examples, and troubleshooting.
73
-
74
-
### Aspire Integration
75
-
76
-
Papercut SMTP can be used for local email testing with Aspire projects. The integration exposes a connection string with the format `endpoint=smtp://<host>:<port>` which can be used to configure the SMTP client.
77
-
78
-
#### Setup
79
-
80
-
Install the package `CommunityToolkit.Aspire.Hosting.PapercutSmtp` from NuGet and then configure the integration in your App Host as follows:
The Papercut SMTP desktop app is both the SMTP server and the viewer — when it's running, you're catching email.
4
+
5
+
## Message Views
6
+
7
+
Select a message to inspect every layer of it:
8
+
9
+
-**Message** — the rendered HTML, exactly as an email client would show it (embedded images included)
10
+
-**Headers** — the full header list
11
+
-**Body** — the plain-text body
12
+
-**Sections** — every MIME part, viewable and downloadable individually (attachments included)
13
+
-**Raw** — the raw encoded message source
14
+
15
+
Right-click works everywhere you'd expect: copy selected text, copy or open links in the HTML view, and Copy / Select All in the Headers, Body, and Raw views.
16
+
17
+

18
+
19
+
## Notifications & the Tray
20
+
21
+
New mail triggers a toast notification. Papercut can minimize to the system tray and sit silently until something arrives:
22
+
23
+

24
+
25
+
Configure minimize-to-tray, minimize-on-close, and run-on-startup behavior in **Options**.
26
+
27
+
## Managing Messages
28
+
29
+
- Messages are stored as standard **`.eml` files** — right-click → open the containing folder to grab them directly
30
+
-**Delete** removes the selected message(s); **Delete All** clears everything older than the moment you confirm
31
+
-**Forward** a received message on to a real SMTP server (with optional authentication) when you need to get a captured email out
32
+
33
+
## Rules
34
+
35
+
Papercut can act on messages automatically as they arrive:
36
+
37
+
-**Forward** — pass received messages along to another SMTP server (supports authentication)
The **Logs** view shows the live application log — SMTP server start/stop, connections, received messages, and any errors. It's the first place to look when something seems off (see [Troubleshooting](troubleshooting.md)).
The container uses non-privileged ports by default: SMTP **2525** and HTTP **8080**. Map them however you like — e.g. `-p 25:2525` if your app insists on port 25.
20
+
21
+
## Docker Compose
22
+
23
+
```yaml
24
+
services:
25
+
papercut:
26
+
image: changemakerstudiosus/papercut-smtp:latest
27
+
ports:
28
+
- "8080:8080"
29
+
- "2525:2525"
30
+
31
+
myapp:
32
+
build: .
33
+
environment:
34
+
# inside the compose network, use the service name as SMTP host
35
+
Smtp__Host: papercut
36
+
Smtp__Port: "2525"
37
+
depends_on:
38
+
- papercut
39
+
```
40
+
41
+
Other containers on the same network reach Papercut at host **`papercut`**, port **`2525`**.
42
+
43
+
## Configuration via Environment Variables
44
+
45
+
Any setting can be overridden with environment variables:
46
+
47
+
```bash
48
+
docker run -d \
49
+
-e SmtpServer__Port=2525 \
50
+
-e Urls=http://0.0.0.0:8080 \
51
+
-e HttpPathPrefix=/webmail \
52
+
-p 8080:8080 -p 2525:2525 \
53
+
changemakerstudiosus/papercut-smtp:latest
54
+
```
55
+
56
+
For TLS in Docker, see [TLS & Authentication](smtp-tls-auth.md).
57
+
58
+
## Tags
59
+
60
+
| Tag | Meaning |
61
+
|-----|---------|
62
+
| `latest` | Latest stable release |
63
+
| `X.Y.Z` / `X.Y` | Specific stable versions |
64
+
| `dev` | Latest development build |
65
+
66
+
## More
67
+
68
+
Full Docker documentation — volume persistence, Kubernetes examples, and troubleshooting (including volume permission errors) — lives on the [Docker Hub page](https://hub.docker.com/r/changemakerstudiosus/papercut-smtp).
69
+
70
+
## .NET Aspire
71
+
72
+
For Aspire projects, skip raw Docker and use the community integration — `CommunityToolkit.Aspire.Hosting.PapercutSmtp`:
73
+
74
+
```csharp
75
+
var papercut = builder.AddPapercutSmtp("papercut");
76
+
77
+
builder.AddProject<Projects.MyApp>()
78
+
.WithReference(papercut)
79
+
.WaitFor(papercut);
80
+
```
81
+
82
+
Papercut appears in the Aspire dashboard with auto-assigned ports and a connection string of the form `endpoint=smtp://<host>:<port>`.
0 commit comments