Advanced mailcmd Usage: Scripts and Integrations
Overview
Advanced mailcmd usage focuses on automating email sending, handling attachments, templating messages, and integrating mailcmd into scripts, cron jobs, CI/CD pipelines, and other tools to build reliable, repeatable workflows.
Common advanced features
- Templating: Use shell heredocs or external template files with placeholders; populate via env vars or simple sed/awk substitutions.
- Attachments: Attach files by specifying the attachment flag (or piping multipart MIME) and ensure correct MIME types.
- Headers: Add custom headers (From, Reply-To, X-headers) for routing, threading, or metadata.
- Authentication: Store credentials securely (e.g., using environment variables, keyrings, or restricted config files) and use TLS/SSL flags for secure transport.
- Batching & rate control: Send in controlled batches with sleep intervals to avoid throttling by SMTP servers.
Example scripts
- Send an email with a rendered template (bash):
bash
#!/usr/bin/env bash recipient=“[email protected]” subject=“Daily Report \((</span><span class="token" style="color: rgb(57, 58, 52);">date</span><span class="token" style="color: rgb(54, 172, 170);"> +%F</span><span class="token" style="color: rgb(54, 172, 170);">)</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span> </span><span></span><span class="token assign-left" style="color: rgb(54, 172, 170);">body</span><span class="token" style="color: rgb(57, 58, 52);">=</span><span class="token" style="color: rgb(54, 172, 170);">\)(sed “s/{{DATE}}/\((</span><span class="token" style="color: rgb(57, 58, 52);">date</span><span class="token" style="color: rgb(163, 21, 21);"> +%F</span><span class="token" style="color: rgb(163, 21, 21);">)</span><span class="token" style="color: rgb(163, 21, 21);">/; s/{{STATUS}}/OK/"</span><span class="token" style="color: rgb(54, 172, 170);"> report-template.txt</span><span class="token" style="color: rgb(54, 172, 170);">)</span><span> </span><span></span><span class="token builtin" style="color: rgb(43, 145, 175);">echo</span><span> </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)body” | mailcmd –to “\(recipient</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span> --subject </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)subject” –smtp smtp.example.com –auth user:pass
- Send with attachment:
bash
mailcmd –to [email protected] –subject “Logs” –attach /var/log/app.log –smtp smtp.example.com –auth user:pass < /dev/null
- Cron job example (run nightly at 02:00):
Code
0 2 * * * /usr/local/bin/daily-report.sh
Integrations
- CI/CD (GitHub Actions/GitLab CI): Run mailcmd in pipeline jobs to notify on build/test results. Store SMTP creds as encrypted secrets.
- Monitoring/Alerting: Pipe alert text from monitoring tools (Prometheus Alertmanager, Nagios) into mailcmd for email notifications.
- Webhooks & Serverless: Use lightweight scripts in serverless functions to format webhook payloads and call mailcmd (or invoke a container with mailcmd) for outgoing mail.
- Logging & Delivery Tracking: Capture mailcmd exit codes and SMTP responses; log to files or a central logging system for delivery auditing and retry logic.
Best practices
- Secure credentials: Prefer environment variables or OS keyrings; restrict file permissions if using config files.
- Retry and backoff: Implement retry loops with exponential backoff for transient SMTP errors.
- Rate limits: Respect provider sending limits; use batching and staggered sends.
- Testing: Use a staging SMTP or disposable inboxes when testing templates and headers.
- Idempotency: Design scripts so repeated runs don’t cause duplicate actions (e.g., mark processed items).
Troubleshooting tips
- Check SMTP connectivity (telnet smtp.example.com 587).
- Inspect mailcmd verbose/debug output for SMTP exchange.
- Verify credentials and TLS settings.
- Confirm MIME boundaries and attachment encoding if attachments fail.
If you want, I can produce ready-to-run scripts for a specific scenario (CI notification, monitoring alert, or templated report).
Leave a Reply