Documentation
This is a website-friendly version of the README. For the latest details, see the repository on GitHub.
Features
- Windows WPF UI for quick SMTP connectivity testing
- TLS modes:
none,starttls,ssl - AUTH testing (when supported by the server)
- Live SMTP transcript (client/server lines)
- Profiles to save/load common setups
- Optional log-to-file for sharing troubleshooting output
Requirements
- Windows 10/11
- .NET (depending on your build target)
- Visual Studio 2022 or the
dotnetCLI
Build from source
git clone https://github.com/Antinon/SMTPTester.git
cd SMTPTester
dotnet build
dotnet run
Using the app
Connection
- Host / Port — target SMTP/MX host (ports
25/587/465) - TLS Mode —
none,starttls, orssl - Timeout — connect/read timeouts
- EHLO domain (optional) — override EHLO/HELO domain
- Skip certificate validation — for testing only
- Log to file — store the raw transcript
Authentication & Message
- Leave username/password empty to skip AUTH.
- Send Test lets you set From/To/Subject/Body and add attachments.
- Some providers require app passwords or OAuth; basic auth can be blocked.
TLS modes
| Mode | What it does | Typical ports |
|---|---|---|
none | Plain TCP (no TLS). Useful for banner checks or legacy relays. | 25 |
starttls | Connect plain, then upgrade via STARTTLS (recommended). | 25 / 587 |
ssl | TLS from the first byte (SMTPS). | 465 |
Profiles
Profiles are simple .ini files — easy to share and version.
host=smtp.office365.com
port=587
tls=starttls
username=sender@contoso.com
password=********
from=sender@contoso.com
to=recipient@contoso.com
subject=SMTP tester
body=This is a test message.
send=False
skipcert=False
timeoutms=20000
logtofile=True
logpath=smtp-protocol.log
If you store profiles in git, consider omitting passwords.
Notes for common providers
*.mail.protection.outlook.com:25is typically inbound MX and often does not allow AUTH.- Microsoft 365 submission:
smtp.office365.com:587+starttls+ authentication (or OAuth). - Gmail may require app passwords or OAuth; basic user/pass can be blocked.
Troubleshooting
- STARTTLS fails → verify the server advertises STARTTLS and supports required TLS versions.
- AUTH fails → confirm username format and whether basic auth is allowed.
- Port 25 blocks AUTH → many providers do not allow AUTH on 25; use 587 for submission.
Need help? Use the forum, or open an issue on GitHub.