Files
hermes-skills/skills/email/email-workflows/references/smtp-delivery-fallbacks.md
T

56 lines
1.8 KiB
Markdown

# SMTP delivery fallback patterns
When a script or cron job needs to send an email but SMTP is unreachable, use these fallback strategies.
## Current SMTP configuration
| Setting | Value |
|---|---|
| Host | `mail.germainebrown.com` |
| Port | **2525** (NOT 587 — netcup blocks 25, 465, 587) |
| TLS | STARTTLS |
| From (outbound) | `g@germainebrown.com` |
| Password file | `/root/.config/himalaya/g-germainebrown.pass` |
**Why 2525:** Netcup VPS blocks outbound ports 25, 465, and 587. The MXroute mail server (mail.germainebrown.com) accepts SMTP on port 2525. This was tested and confirmed working for both `g@germainebrown.com` and `shonuff@germainebrown.com`.
## Detect SMTP reachability first
```python
import socket
for port in [2525, 587, 465]:
s = socket.socket()
s.settimeout(5)
try:
s.connect(('mail.germainebrown.com', port))
print(f'Port {port}: available')
s.close()
except (socket.timeout, ConnectionRefusedError, OSError):
print(f'Port {port}: blocked')
```
## Fallback: Wasabi S3 upload
If SMTP is completely unreachable:
```bash
source /opt/awscli-venv/bin/activate
aws s3 cp <path/to/file> s3://hermes-vps-backups/<filename> \
--endpoint-url https://s3.us-east-1.wasabisys.com/
```
Then notify the user via Telegram/DM: "File uploaded to Wasabi — grab it at `s3://bucket/key`"
## All scripts updated to use port 2525
The following files were patched from 587 → 2525 (confirmed working):
- `/root/.hermes/scripts/send-recovery.py`
- `/root/.hermes/scripts/send-backup-email.py`
- `/root/.hermes/scripts/send-backup-readme.py`
- `/root/.hermes/scripts/daily-feed-summary.py`
- `/root/.config/himalaya/shonuff.toml`
## Future services (Mautic, etc.)
Any new service that sends email from this box must use port **2525**, not 587. Netcup's outbound port blocking applies to all servers in their network.