56 lines
1.8 KiB
Markdown
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.
|