⚡ The Setup
It started out harmlessly enough.
All I wanted was a clean, automated backup process for Clifford’s Webhole — my corner of the internet where code, chaos, and a bit of sanity coexist.
I built a bash-driven backup system:
• Docker containers humming,
• Databases dumping on schedule,
• Logs archiving like clockwork.
Then came the final step — sending myself an email notification after each backup.
Simple, right? Not even close.
💀 The Descent
I configured a lightweight SMTP client on my VPS and pointed it at my domain’s mail relay.
WordPress’s SMTP plugin was content. I could log in to webmail without a hitch.
But the command-line mailer stubbornly replied with:
535 Authentication credentials invalid
That message marked the beginning of a deep dive through TLS settings, authentication methods, ports, verbose logs — and a few colorful words that don’t belong in documentation.
🧠 The Debugging Spiral
As the night went on, I cycled through the classic stages of sysadmin grief:
• Denial: “It’s probably caching.”
• Anger: “Why does the GUI work but the CLI doesn’t?!”
• Bargaining: “Maybe reinstalling packages will fix it.”
• Depression: “Guess I’m doing manual backups forever.”
• Acceptance: “Verbose logging. One. More. Time.”
TLS handshakes looked fine, STARTTLS worked, the server offered both AUTH PLAIN and AUTH LOGIN — yet every attempt ended in failure.
💡 The Revelation
The culprit turned out to be deceptively small.
In the mail client’s configuration, my password was wrapped in angle brackets — literally entered as <mypassword>.
The mailer dutifully included those brackets when authenticating.
The fix was simple: remove the brackets, retype the password cleanly (no quotes, no symbols), and test again.
Moments later, the terminal proudly displayed:
250 Requested mail action okay, completed 221 Service closing transmission channel
For a sysadmin, that’s the digital equivalent of popping a champagne cork.
🧩 The Aftermath
With SMTP finally behaving, the backup script now:
• Dumps the database
• Archives site files
• Emails the logs (with the archive attached)
• Rotates old backups automatically
Everything runs nightly. Each morning, a short success or failure log lands in my inbox.
Quiet, reliable, predictable — exactly how infrastructure should be.
⚙️ Lessons Learned
• Never underestimate a misplaced character.
• Always test mailers in verbose mode.
• Explicit authentication methods are your friend.
• Detailed logging preserves your sanity.
• Coffee remains an essential debugging tool. ☕
📘 Key Takeaways
• A single character can break automation.
• GUI tools may hide subtle authentication issues.
• Test at the command line before blaming your application.
• Backups should be boring — that’s when you know they’re working.

