Bạn muốn máy chủ Linux của mình gửi email qua Gmail nhưng chưa biết cách thực hiện? Bài viết này sẽ hướng dẫn chi tiết cách cài đặt và cấu hình Sendmail với Gmail SMTP trên Ubuntu/Debian, giúp bạn gửi email một cách an toàn, không cần xác thực DKIM/DMARC.
5 bước cài đặt gửi mail trên Ubuntu Linux
Yêu cầu: Sendmail sẽ sử dụng PHP, nên máy chủ cần được cài đặt PHP thành công. Ngoài ra, bạn cần chuẩn bị tài khoản Gmail và mật khẩu ứng dụng (App Password) để sử dụng SMTP.
Bước 1: Cập nhật hệ thống
Cập nhật danh sách các gói (package) của hệ thống để đảm bảo bạn đang cài đặt các phiên bản mới nhất:
sudo apt-get update
Bước 2: Cài đặt Sendmail và các phần phụ thuộc
Tiếp theo, cài đặt tác nhân chuyển thư Sendmail (MTA) cùng với các tiện ích cần thiết để gửi email từ Gmail SMTP:
sudo apt-get install sendmail mailutils sendmail-cf sasl2-bin libsasl2-modules
Trong lệnh này:
sendmail
: Phần mềm Sendmail cốt lõi chịu trách nhiệm gửi email trên hệ thống Linux.mailutils
: Bộ công cụ hỗ trợ gửi và nhận email từ dòng lệnh và tích hợp với PHP.sendmail-cf
: Các tệp cấu hình hỗ trợ tùy chỉnh Sendmail.sasl2-bin
vàlibsasl2-modules
: Cung cấp cơ chế xác thực bảo mật để kết nối Gmail SMTP
Bước 3: Cấu hình Gmail SMTP cho Sendmail
Để cấu hình Gmail SMTP, bạn cần chỉnh sửa file sendmail.mc
như sau:
sudo nano /etc/mail/sendmail.mc
Thêm các cấu hình dưới đây trước dòng MAILER_DEFINITIONS
(xem ảnh chụp màn hình):
# SMTP For Linux Ubuntu or Debian (itsmeit) define(`SMART_HOST',`[smtp.gmail.com]')dnl define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl define(`confAUTH_OPTIONS', `A p')dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl FEATURE(`authinfo',`hash -o /etc/mail/authinfo/gmail-auth.db')dnl define(`confDOMAIN_NAME', `mail.youdomain.com')dnl

Lưu ý:
- Đảm bảo thông số
smtp.gmail.com
được cấu hình đúng để sử dụng Gmail SMTP. - Thay
confDOMAIN_NAME
bằng tên miền thực của bạn. - Nếu bạn muốn gửi mail từ máy tính localhost, bạn cần thêm tên miền mail của
confDOMAIN_NAME
vào file /etc/hosts giống như ảnh chụp màn hình bên dưới.

Bước 4: Cấu hình thông tin Gmail
1. Tạo file xác thực:
Để sử dụng Gmail SMTP với Sendmail, bạn cần tạo mật khẩu ứng dụng (App Password) từ tài khoản Gmail của mình. Đây là mật khẩu riêng biệt giúp bảo mật việc gửi email thông qua các ứng dụng của bên thứ ba. Xem cách tạo mật khẩu ứng dụng tại [link].
Tạo tệp có tên “gmail-auth” để lưu thông tin tài khoản gmail và mật khẩu ứng dụng SMTP của bạn.
sudo -s mkdir -m 700 /etc/mail/authinfo touch /etc/mail/authinfo/gmail-auth.db chmod 600 /etc/mail/authinfo/gmail-auth.db
Tiếp tục hãy sửa tên tài khoản và mật khẩu ứng dụng như đoạn mã bên dưới và thêm vào file gmail-auth.
sudo nano /etc/mail/authinfo/gmail-auth
AuthInfo:smtp.gmail.com "U:buivanloi.2010@gmail.com" "P:16-digit-app-password"

2. Xác thực SMTP cho Sendmail với Gmail
Chạy lệnh sau để tạo một bản sao mã hóa từ tệp gmail-auth, lệnh này tạo một tệp cơ sở dữ liệu (gmail-auth.db) mà Sendmail có thể sử dụng để xác thực an toàn.
sudo makemap hash /etc/mail/authinfo/gmail-auth.db < /etc/mail/authinfo/gmail-auth
Áp dụng các thay đổi cấu hình bằng cách khởi động lại dịch vụ Sendmail:
sudo systemctl restart sendmail
Bước 5. Kiểm tra việc gửi email
Để kiểm tra chức năng gửi email, bạn có thể thử kích hoạt thông báo email từ trang web của mình cho các hành động như đặt hàng, đặt lại mật khẩu, đăng ký tài khoản hoặc đăng ký nhận bản tin.
Ngoài ra, bạn có thể sử dụng dòng lệnh sau để gửi email kiểm tra từ terminal:
echo "Content: Test gmail" | mail -s "Subject: Test sendemail" -a "From: your@gmail.com" -a "To: To <your@gmail.com>" your@gmail.com
Thay thế your@email.com bằng địa chỉ email thực của bạn.

FAQ: các lỗi sendmail thường gặp
Lỗi liên quan đến cấu hình sendmail
Trong trường hợp bạn tuỳ chỉnh quá nhiều, hoặc vô tình làm cấu hình chính /etc/mail bị lỗi, bạn có thể dễ dạng tạo lại cấu hình mặc định bằng lệnh: sudo sendmailconfig
Lỗi Authentication failed khi gửi email qua Gmail SMTP
File gmail-auth trong (bước 4) bị cấu hình sai thông tin tài khoản Gmail hoặc mật khẩu ứng dụng (App Password). Tài khoản của bạn bắt buộc phải bật xác minh 2 bước (F2A) và tạo sử dụng mật khẩu ứng dụng riêng chứ không phải là dùng trực tiếp tài khoản và mật khẩu gmail.
Lỗi Message queued but not sent
Đảm bảo dịch vụ sendmail đang hoạt động: sudo systemctl status sendmail. Nếu trạng thái không phải là active (running) thì bạn cần kiểm tra log sendmail (/var/log/mail.log), căn cứ vào log để có hướng khắc phục.
Lỗi Email bị đưa vào hàng đợi nhưng không được gửi đi.
Chạy lệnh bên dưới để xem tổng có bao nhiêu email bị đưa vào hàng đợi: sendmail -bp. Nếu cần thiết bạn có thể xoá sạch chúng vì nếu quá nhiều mail đợi có thể việc gửi mail sẽ bị chậm: sudo postsuper -d ALL
Lỗi TLS Handshake Failed – Liên quan đến chứng chỉ SSL/TLS
Lỗi này thường xảy ra khi kết nối bảo mật SSL/TLS đến máy chủ SMTP không thành công, nguyên nhân có thể do chứng chỉ SSL/TLS không hợp lệ hoặc cấu hình PHP và OpenSSL không tương thích. Để khắc phục, bạn cần bật OpenSSL trong PHP, cập nhật phiên bản SSL/TLS mới nhất, và đảm bảo chứng chỉ SSL hợp lệ cùng cổng cấu hình chính xác (587 cho TLS, 465 cho SSL).
Lỗi Rate Limit Exceeded khi gửi email qua Gmail SMTP
Lỗi ‘Rate Limit Exceeded’ xảy ra khi bạn gửi quá số lượng email tối đa mà Gmail cho phép trong ngày; hãy giảm số email gửi đi hoặc sử dụng Google Workspace để tăng giới hạn.