A free SMTP relay that still accepts plain username-and-password auth.
Built for the printers, scanners, and legacy apps left behind when
Microsoft 365 turns off SMTP AUTH Basic auth.
No OAuth to implement. No credit card. No mail server to run.
Scoped to transactional email (notifications, password resets, contact
forms) on a shared domain, capped at 200 messages/day per account — not
built for bulk or marketing sending, at any price
(why).
Get a free account → · Exchange Online migration → · Documentation site · Quickstart · Code examples · FAQ · Polski
Getting
535 5.7.139 Authentication unsuccessful, basic authentication is disabled? That's Microsoft switching off Basic auth for SMTP AUTH — here's what to do about it, including the options that aren't this project.
curl --url "smtps://mx.msgwing.com:465" \
--user "$ZEROSMTP_USERNAME:$ZEROSMTP_PASSWORD" \
--mail-from "$ZEROSMTP_FROM" --mail-rcpt "$ZEROSMTP_TO" \
--upload-file <(printf 'Subject: Test\r\n\r\nHello from ZeroSMTP!') --ssl-reqdThat's the whole thing — no SDK, no API key, just SMTP credentials that work with anything that already speaks SMTP.
| Server | mx.msgwing.com |
| Port | 587 (STARTTLS) or 465 (SSL/TLS) |
| Login | your randomly generated @msgwing.com address |
| Cost | free — up to 200 emails/day (limits) |
| Catch | mail is sent from @msgwing.com, not your own domain (why) |
- Register and activate a free account at msgwing.com, then copy your randomly generated
@msgwing.comlogin and password. - Copy
.env.exampleto.envand fill in your credentials. - Run the curl snippet above (
export $(grep -v '^#' .env | xargs)first), or pick your language from the Code Examples table — every example reads the same.envvariables. - Having trouble? See Troubleshooting — most first-run failures are a cloud provider blocking outbound SMTP ports, not a misconfiguration.
Prefer not to install anything locally? Every runtime used below (Python, PHP, Node, Ruby, Go, Java, Kotlin/Gradle, .NET, Rust) is preinstalled in the included Dev Container / Codespace.
- Nothing to run and nothing to pay for. No mail server, no API key, no credit card, no per-email pricing tier to graduate into.
- Works with anything that already speaks SMTP — apps, scripts, network printers, NAS boxes, IoT hardware. If it has a "SMTP server" field, it works.
- Plain SMTP AUTH still accepted. No OAuth2 flow to implement, which is the whole point for old devices that will never get a firmware update.
- Managed reputation. Accounts are randomly generated on a domain that's actively monitored for abuse, so you're not warming up an IP yourself.
- 15 copy-paste examples, all reading the same environment variables, plus setup guides for Windows Server, Linux, and printers by brand.
- Verifiably up — the status badge above is a real check that runs against
mx.msgwing.comevery 6 hours, not a static image.
Good for: contact forms · password resets · CI/CD and monitoring alerts · scan-to-email · IoT and device notifications · homelabs.
Microsoft disables Basic authentication for SMTP AUTH by default at the end of December 2026. Printers, NAS boxes, backup jobs and monitoring tools that can't do OAuth stop sending — and the alerting ones fail silently, so you find out during the incident they should have warned you about.
Migration guide → covers every option (Graph API, Direct Send, on-prem relay, paid services), not just this one. What breaks → is the audit list, with PowerShell to find your exposure.
Setup guides: Network printers · Popular applications · Linux (Debian/Ubuntu/Rocky/Fedora/openSUSE) · System-wide mail relay (Postfix/msmtp/Exim4) · Windows Server · Exchange Online SMTP AUTH migration · Monitoring alerts · Device case studies · Troubleshooting · Reliability (retries) · vs. other free relays · FAQ
| ZeroSMTP | Gmail SMTP relay | Amazon SES | Mailgun / SendGrid / Brevo (typical free tier) | |
|---|---|---|---|---|
| Cost | Free, no card required | Free (personal Google account) | Pay-per-email (a limited free allowance only applies from AWS EC2, first 12 months) | Free tier, usually capped low and gated behind signup + domain verification |
| Setup | Register, copy SMTP credentials, done | Needs a Google account; Google's terms discourage automated/bulk sending over it | Needs an AWS account, plus a "production access" request before sending to unverified addresses | Signup + domain verification for full features |
| Custom "From" domain | No — always @msgwing.com (see FAQ) |
Yes, your Gmail/Workspace address | Yes | Yes, once your domain is verified |
| Best fit | Contact forms, password resets, notifications, printers/IoT — anywhere the from-address doesn't need to be your own domain | Low-volume personal scripts | Production apps that need it and can handle the AWS setup | Businesses that need branded sending and can handle the setup |
Free-tier terms above change over time — check each provider's current pricing page before committing to one.
Popular self-hosted options like docker-mailserver,
Mailu, or mailcow
give you a mailbox on your own domain and full control — but you're the one
running Postfix, DKIM/SPF/DMARC, spam filtering, and IP/domain reputation,
which is real ongoing maintenance, not a one-time setup. ZeroSMTP is the
other end of that trade-off: zero setup and zero maintenance, in exchange
for sending from the shared @msgwing.com address instead of your own
domain. If you already run one of those and it's working, there's no reason
to switch. If you're not sure the effort is worth it yet for a script,
contact form, or side project, ZeroSMTP costs nothing to try first.
Using ZeroSMTP from a workflow (CI failure alerts, deploy notifications,
scheduled reports)? msgwing/send-email-action
on the GitHub Marketplace
wraps the setup below into one step:
- uses: msgwing/send-email-action@v1
with:
username: ${{ secrets.ZEROSMTP_USERNAME }}
password: ${{ secrets.ZEROSMTP_PASSWORD }}
from: ${{ secrets.ZEROSMTP_USERNAME }}
to: you@example.com
subject: "Build failed"
body: "See the run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"Ready-to-run, production-ready examples for mx.msgwing.com:465 (SSL/TLS) or
:587 (STARTTLS), one file per language:
| Language | File |
|---|---|
| Python | python-zerosmtp.py |
| PHP (PHPMailer) | php-zerosmtp.php |
| PHP (Symfony Mailer) | php-symfony-mailer-zerosmtp.php |
| Node.js | node-zerosmtp.mjs |
| TypeScript | ts-zerosmtp.ts |
| Bash (curl) | bash-curl-zerosmtp.sh |
| Bash (swaks) | bash-swaks-zerosmtp.sh |
| Java | java-zerosmtp.java |
| C# (.NET / MailKit) | cs-zerosmtp.cs |
| Go | go-zerosmtp.go |
| Ruby | ruby-zerosmtp.rb |
| Rust | rust-zerosmtp.rs |
| Kotlin | kotlin-zerosmtp.kt |
| Swift | swift-zerosmtp.swift |
| PowerShell | pwsh-zerosmtp.ps1 |
Each example reads credentials from ZEROSMTP_* environment variables
(ZEROSMTP_USERNAME, ZEROSMTP_PASSWORD, ZEROSMTP_FROM, ZEROSMTP_TO,
ZEROSMTP_SUBJECT) — never hardcode real credentials into a script.
Every example that needs a third-party library has a matching manifest at the repo root, so you can install with each ecosystem's normal command instead of hunting down library names/versions yourself:
| Language(s) | Install with |
|---|---|
| Node.js / TypeScript | npm install |
| PHP | composer install |
| Rust | cargo build (fetches deps automatically) |
| C# | dotnet build cs-zerosmtp.csproj |
| Java | mvn compile |
| Kotlin | gradle build |
| Swift | swift build |
| Python, Ruby, Go, Bash, PowerShell | none — standard library only |
Easy Configuration:
- Login: randomly generated address @msgwing.com
- SMTP Server: mx.msgwing.com
- Port: 587 (STARTTLS) or 465 (SSL/TLS)
- Encryption: SSL/TLS - required
We respect your privacy - your data is not processed for any marketing or commercial purposes.
✓ Domain Reputation Enhanced: The msgwing.com domain reputation has been improved, with strict anti-spam measures enforced. All spam accounts have been blocked and removed to ensure optimal email deliverability for legitimate users.
Interested in checking the reputation of msgwing.com? You can test this yourself using mail-tester.com:
- Create a free SMTP account at msgwing.com
- Use our PowerShell test script: SendEmailTest_mail-tester.com.ps1
- Generate a random email at mail-tester.com and send a test message from your @msgwing.com address
- Check the reputation score and detailed analysis
✓ Security Improvements: We have implemented comprehensive security enhancements to the msgwing.com service, including improved authentication protocols, enhanced abuse monitoring, and strengthened infrastructure security measures.
If you have any questions, feel free to contact us: abuse@msgwing.com
Great deliverability • Random high-reputation account • No costs • Full privacy • Works with everything
Start sending emails today - completely free and with no hidden rules!
Registration is available at: https://msgwing.com

