Cách Gửi Email Từ Command Line Ubuntu Bằng SMTP (Gmail/Domain)
Giới Thiệu
Gửi email từ Command Line Ubuntu là kỹ năng quan trọng cho quản trị viên hệ thống. Bài viết này hướng dẫn chi tiết cách cấu hình và sử dụng ssmtp và mailutils để gửi email qua SMTP của Gmail hoặc SMTP server thông thường.
1. Chuẩn Bị Trước Khi Cài Đặt
1.1. Tạo App Password Cho Gmail (Nếu Dùng Gmail SMTP)
- Truy cập Google App Passwords
- Chọn “Mail” → “Other (Custom name)”
- Đặt tên (vd: “Ubuntu Server”) → Nhận mật khẩu 16 ký tự
1.2. Thông Tin SMTP Server
Nhà Cung Cấp | SMTP Server | Port | SSL/TLS |
---|---|---|---|
Gmail | smtp.gmail.com | 465 | SSL |
Outlook | smtp-mail.outlook.com | 587 | STARTTLS |
Zoho | smtp.zoho.com | 465 | SSL |
SMTP Tùy Chỉnh | your-domain.com | 25/465/587 | Tùy cấu hình |
2. Cài Đặt và Cấu Hình SSMTP
2.1. Cài Đặt Gói
sudo apt update
sudo apt install ssmtp mailutils -y
2.2. Cấu Hình SSMTP
sudo nano /etc/ssmtp/ssmtp.conf
Mẫu cấu hình cho Gmail:
[email protected]
mailhub=smtp.gmail.com:465
[email protected]
AuthPass=your_app_password
UseTLS=YES
UseSTARTTLS=NO
FromLineOverride=YES
hostname=your-server-hostname
Mẫu cấu hình SMTP thông thường:
[email protected]
mailhub=mail.your-domain.com:587
[email protected]
AuthPass=your_password
UseTLS=YES
UseSTARTTLS=YES
FromLineOverride=YES
2.3. Phân Quyền Bảo Mật
sudo chmod 640 /etc/ssmtp/ssmtp.conf
sudo chown root:mail /etc/ssmtp/ssmtp.conf
3. Gửi Email Bằng SSMTP
3.1. Gửi Email Tương Tác
ssmtp [email protected]
Nhập nội dung:
To: [email protected]
From: [email protected]
Subject: Test Email
This is a test email sent from Ubuntu command line.
Ctrl+D to send.
3.2. Gửi Email Tự Động
echo -e "Subject: Test Email\n\nThis is automated email" | ssmtp [email protected]
4. Gửi Email Bằng Mail/Mailutils
4.1. Gửi Email Cơ Bản
echo "Email body" | mail -s "Subject" -a "From: Sender <[email protected]>" [email protected]
4.2. Gửi Email Có Đính Kèm
mail -s "Subject" -a "From: [email protected]" -A /path/to/file [email protected] <<< "Email body"
5. Tự Động Hóa Gửi Email
5.1. Script Gửi Báo Cáo Hệ Thống
#!/bin/bash
REPORT="/tmp/system_report_$(date +%F).txt"
echo "=== System Report ===" > $REPORT
echo "Date: $(date)" >> $REPORT
echo "Uptime: $(uptime)" >> $REPORT
echo -e "\n=== Disk Usage ===" >> $REPORT
df -h >> $REPORT
cat $REPORT | mail -s "Daily System Report" [email protected]
5.2. Script Gửi Cảnh Báo Khi Disk Đầy
Sau đây là tập lệnh bash sẽ kiểm tra và cảnh báo nếu dung lượng ổ đĩa sử dụng vượt ngưỡng 80%. Chúng ta hãy gọi nó là disk_alert.sh.
#!/bin/sh
# Purpose: Monitor Linux disk space and send an email alert to $ADMIN
ALERT=80 # alert level
ADMIN="you@your-email" # dev/sysadmin email ID
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read -r output;
do
echo "$output"
usep=$(echo "$output" | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo "$output" | awk '{ print $2 }' )
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |
mail -s "Alert: Almost out of disk space $usep%" "$ADMIN"
fi
done
Hoặc
#!/bin/bash CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g') THRESHOLD=90 if [ "$CURRENT" -gt "$THRESHOLD" ] ; then echo "Cảnh báo: Disk sắp đầy ($CURRENT%)" | mail -s "Disk Alert" [email protected] fi
Lưu ý: Có thể sử dụng phương pháp thứ 2 với Netdata
5.2. Thiết Lập Cron Job
Bây giờ, bạn có thể sao chép tệp disk_alert.sh trên vào /etc/cron.daily/ nếu bạn muốn chạy nó một lần một ngày, hằng ngày.
Hoặc thêm các dòng lệnh sau vào file crontab hoặc lệnh crontab -e
0 8 * * * /path/to/script.sh
0 * * * * /path/to/disk_alert.sh #Kiểm tra mỗi giờ
Sau đó, bạn cần cấp quyền thực thi cho tập lệnh shell này:
chmod +x /etc/cron.daily/disk_alert.sh
# Hoặc
chmod +x /path/to/disk_alert.sh
6. Khắc Phục Sự Cố
6.1. Kiểm Tra Log
tail -f /var/log/mail.log
6.2. Kiểm Tra Kết Nối SMTP
telnet smtp.gmail.com 465
# Hoặc
openssl s_client -connect smtp.gmail.com:465 -crlf
6.3. Lỗi Thường Gặp
- 535 Authentication Failed: Kiểm tra lại mật khẩu ứng dụng
- Connection refused: Kiểm tra firewall và port SMTP
- Mail queued but not sent: Kiểm tra DNS reverse lookup
7. Bảo Mật Nâng Cao
- Sử dụng xác thực 2 yếu tố cho tài khoản email
- Hạn chế IP được phép gửi trong SMTP server
- Mã hóa mật khẩu bằng công cụ như openssl
- Sử dụng SMTP relay thay vì gửi trực tiếp
Kết Luận
Bài viết đã trình bày đầy đủ cách:
✔️ Cấu hình SMTP qua Gmail và SMTP thông thường
✔️ Sử dụng ssmtp và mailutils để gửi email
✔️ Tự động hóa gửi email từ cron job và script
Với hướng dẫn này, bạn có thể dễ dàng thiết lập hệ thống gửi email từ command line Ubuntu để phục vụ các nhu cầu:
- Gửi cảnh báo hệ thống
- Gửi báo cáo định kỳ
- Tích hợp vào các script tự động
Lưu ý quan trọng: Đối với môi trường production, nên sử dụng các dịch vụ email chuyên nghiệp như SendGrid, Mailgun hoặc cấu hình SPF/DKIM/DMARC đầy đủ để tránh email bị đánh dấu là spam.