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 ssmtpmailutils để 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)

  1. Truy cập Google App Passwords
  2. Chọn “Mail” → “Other (Custom name)”
  3. Đặ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ấpSMTP ServerPortSSL/TLS
Gmailsmtp.gmail.com465SSL
Outlooksmtp-mail.outlook.com587STARTTLS
Zohosmtp.zoho.com465SSL
SMTP Tùy Chỉnhyour-domain.com25/465/587Tù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.

Bài viết liên quan

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

For security, use of CloudFlare's Turnstile service is required which is subject to the CloudFlare Privacy Policy and Terms of Use.