Send Emails from the Command Line with Swaks
Send emails through AhaSend’s SMTP servers directly from your terminal using Swaks, a powerful command-line tool designed for testing and debugging SMTP servers. Perfect for scripting, automation, and troubleshooting email delivery issues.
What is Swaks? Swaks (Swiss Army Knife for SMTP) is a versatile, scriptable tool for testing SMTP servers and sending emails from the command line. It supports TLS encryption, various authentication methods, and is designed as a diagnostic tool rather than for high-volume sending.
Prerequisites
Before you begin, ensure you have:
Swaks installed on your system
Command line access (Terminal, Command Prompt, etc.)
Basic familiarity with command-line tools
Domain verified in your AhaSend account
SMTP credentials created (username and password)
Access to your AhaSend dashboard for credential management
Need SMTP Credentials? If you haven’t created SMTP credentials yet, check out our SMTP Credentials guide for step-by-step instructions.
Installation
Install Swaks using your system’s package manager:
Ubuntu/Debian
CentOS/RHEL/Fedora
macOS (Homebrew)
Windows (Chocolatey)
sudo apt-get update
sudo apt-get install swaks
Connection Settings
Use these settings for all Swaks commands with AhaSend:
Primary Server Host: send.ahasend.com
Ports: 587 (recommended), 25, 2525
Security: TLS (—tls flag)
Authentication: Plain (—auth plain)
US Server Host: send-us.ahasend.com
Ports: 587 (recommended), 25, 2525
Security: TLS (—tls flag)
Authentication: Plain (—auth plain)
Basic Email Examples
Plain Text Email
HTML Email
With Attachment
swaks \
--from hello@yourdomain.com \
--to user@example.com \
--server send.ahasend.com \
--port 587 \
--auth plain \
--tls \
--auth-user 'YOUR_SMTP_USERNAME' \
--auth-password 'YOUR_SMTP_PASSWORD' \
--header 'Subject: Welcome to our platform!' \
--body "Thanks for signing up. We're excited to have you!"
Advanced Examples
Multiple Recipients
With CC and BCC
Multiple Attachments
swaks \
--from hello@yourdomain.com \
--to user1@example.com,user2@example.com \
--server send.ahasend.com \
--port 587 \
--auth plain \
--tls \
--auth-user 'YOUR_SMTP_USERNAME' \
--auth-password 'YOUR_SMTP_PASSWORD' \
--header 'Subject: Newsletter Update' \
--body "This is our latest newsletter update."
Add AhaSend’s special headers to control tracking, retention, and other features:
With Tracking Headers
With Retention Headers
Complete Example
swaks \
--from hello@yourdomain.com \
--to user@example.com \
--server send.ahasend.com \
--port 587 \
--auth plain \
--tls \
--auth-user 'YOUR_SMTP_USERNAME' \
--auth-password 'YOUR_SMTP_PASSWORD' \
--header 'Subject: Newsletter with Tracking' \
--add-header "ahasend-track-opens: true" \
--add-header "ahasend-track-clicks: true" \
--add-header "ahasend-tags: newsletter,cli,swaks" \
--body "<html><body><h1>Newsletter</h1><p>Check out our <a href='https://yourdomain.com/features'>latest features</a>!</p></body></html>" \
--add-header "Content-Type: text/html"
Testing with Sandbox Mode
Use sandbox mode to safely test your email integration:
Sandbox Test
Sandbox Bounce Test
Sandbox with Verbose Output
swaks \
--from hello@yourdomain.com \
--to test@example.com \
--server send.ahasend.com \
--port 587 \
--auth plain \
--tls \
--auth-user 'YOUR_SMTP_USERNAME' \
--auth-password 'YOUR_SMTP_PASSWORD' \
--header 'Subject: Sandbox Test Email' \
--add-header "AhaSend-Sandbox: true" \
--add-header "AhaSend-Sandbox-Result: deliver" \
--body "This email is sent in sandbox mode for testing."
Sandbox Benefits: Emails sent in sandbox mode are free, trigger webhooks normally, and never actually deliver to recipients - perfect for development and testing.
Scripting and Automation
Shell Script Example
#!/bin/bash
# Configuration
SMTP_SERVER = "send.ahasend.com"
SMTP_PORT = "587"
SMTP_USERNAME = "YOUR_SMTP_USERNAME"
SMTP_PASSWORD = "YOUR_SMTP_PASSWORD"
FROM_EMAIL = "hello@yourdomain.com"
# Function to send email
send_email () {
local to_email = " $1 "
local subject = " $2 "
local body = " $3 "
swaks \
--from " $FROM_EMAIL " \
--to " $to_email " \
--server " $SMTP_SERVER " \
--port " $SMTP_PORT " \
--auth plain \
--tls \
--auth-user " $SMTP_USERNAME " \
--auth-password " $SMTP_PASSWORD " \
--header "Subject: $subject " \
--body " $body "
}
# Send notification email
send_email "admin@yourdomain.com" "System Alert" "The backup process has completed successfully."
# Send welcome email
send_email "newuser@example.com" "Welcome!" "Thanks for joining our platform."
Environment Variables
For security, use environment variables for credentials:
# Set environment variables
export AHASEND_SMTP_USERNAME = "your_smtp_username"
export AHASEND_SMTP_PASSWORD = "your_smtp_password"
export AHASEND_FROM_EMAIL = "hello@yourdomain.com"
# Use in swaks command
swaks \
--from " $AHASEND_FROM_EMAIL " \
--to user@example.com \
--server send.ahasend.com \
--port 587 \
--auth plain \
--tls \
--auth-user " $AHASEND_SMTP_USERNAME " \
--auth-password " $AHASEND_SMTP_PASSWORD " \
--header 'Subject: Secure Email' \
--body "This email uses environment variables for credentials."
Resources
Swaks Documentation Official Swaks documentation and manual
SMTP Testing Guide Complete guide to testing email delivery
AhaSend SMTP Settings SMTP server configuration and credentials
AhaSend Support Get help from our engineering team
Pro Tip: Start with sandbox mode and basic commands before building complex automation. Use environment variables for credentials and always test scripts thoroughly before production use.