Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Gửi Email Từ Linux Bash/Shell: Hướng Dẫn Bước Đi Bước & Ví Dụ

Bài viết này sẽ chỉ cho bạn một vài cách để gửi email từ dòng lệnh/shell Linux – cũng như từ script Bash/Shell.

Tại sao bạn muốn gửi email từ dòng lệnh? Có lẽ không phải để giao tiếp – hầu hết mọi người dùng khách email với giao diện người dùng đẹp để gửi tin nhắn cho nhau hàng ngày – nhưng bạn có thể muốn máy tính gửi thông báo email khi một tác vụ hoàn thành hoặc khi một sự kiện xảy ra.

Cảnh báo email như vậy thường dùng để cảnh báo ổ đĩa đầy hoặc thông báo cho ai đó nếu có lỗi xảy ra, mất điện – bạn thậm chí có thể viết thông báo cung cấp tóm tắt hàng ngày về người dùng mới đăng ký ứng dụng mới nhất của bạn. Dưới đây là một vài công cụ cho phép bạn làm điều này – kèm ví dụ.

Lưu Ý Về Việc Gửi Thư

Các ví dụ trong bài viết này đều giả định bạn đang dùng một máy chủ SMTP bên ngoài để gửi thư. Điều này có thể là dịch vụ gửi email chuyên dụng như Amazon SES hoặc MailGun, hoặc bạn có thể gửi email từ nhà cung cấp email trực tuyến (Gmail, Outlook.com) dùng chi tiết SMTP họ cung cấp.

Bài viết này không bao gồm việc thiết lập và gửi thư trực tiếp từ máy chủ SMTP của chính bạn vì một lý do đơn giản – tin nhắn của bạn có khả năng bị chặn nếu chúng đến từ địa chỉ IP nhà ở, và bạn sẽ gặp khó khăn trong việc khắc phục sự cố xem email cảnh báo của bạn có hoạt động và bị chặn, hay chỉ đơn giản là không hoạt động.

Chọn Chương Trình Phù Hợp

Nhiều gói phần mềm có thể gửi email – một số lượng lớn. Tôi không sẽ cố gắng bao phủ tất cả – bạn đang ở đây tìm cái chỉ hoạt động, vì vậy…

MSMTP là công cụ lý tưởng cho công việc này, nên tôi sẽ tập trung bài viết này vào cách dùng chương trình đó.

Trước đây, SSMTP là lựa chọn ưa thích của tôi, nhưng việc phát triển gói đó đã dừng lại – MSMTP là một sự thay thế tốt.

Các lựa chọn khác bao gồm lệnh sendmail, mail, và mutt. Tất cả sẽ hoạt động, nhưng MSMTP dễ dùng và cấu hình và có thể duy trì cấu hình độc lập không can thiệp vào thư hệ thống.

Dùng MSMTP Để Gửi Email

MSMTP là một chương trình gửi email (và chỉ gửi email) – làm cho nó hoàn hảo cho việc gửi email từ script Bash.

Khi bạn đã cài đặt MSMTP, bạn có thể xem hướng dẫn sử dụng bằng cách chạy:

man msmtp

Cài Đặt MSMTP

Trên hệ thống dựa trên Debian/Ubuntu, chạy các lệnh sau để cài gói MSMTP bắt buộc và gói ca-certificates nếu chưa cài:

sudo apt update
sudo apt install msmtp ca-certificates

Lệnh sudo được dùng để chạy lệnh với đặc quyền root/quản trị xuyên suốt bài viết này.

Cấu Hình MSMTP

MSMTP hỗ trợ cấu hình theo từng người dùng hoặc cấu hình hệ thống toàn cục – chúng ta sẽ thiết lập với cấu hình toàn cục để tất cả dịch vụ có thể dùng MSMTP gửi email.

MSMTP đi kèm với tệp cấu hình ví dụ chúng ta có thể dùng làm mẫu – chúng ta cần sao chép nó vào thư mục /etc/ để dùng:

sudo cp /usr/share/doc/msmtp/examples/msmtprc-system.example /etc/msmtprc

Chỉnh sửa tệp cấu hình dùng trình soạn thảo văn bản nano:

sudo nano /etc/msmtprc

Bây giờ, bạn có thể điền chi tiết máy chủ SMTP bạn sẽ dùng để gửi email. Bạn có thể định nghĩa một vài tài khoản thư nếu muốn gửi từ máy chủ hoặc địa chỉ khác nhau.

Dưới đây là cấu hình mẫu với hai địa chỉ Gmail:

# Set default values for all following accounts.
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log

# Gmail 1
account gmail1
host smtp.gmail.com
port 587
from admin@wsxdn.com
user username1
password password1

# Gmail 2
account gmail1
host smtp.gmail.com
port 587
from admin@wsxdn.com
user username2
password password2

# Set a default account
account default : gmail1

Lưu tệp – MSMTP sẵn sàng dùng.

Gửi Email

Khi MSMTP đã thiết lập xong, bạn sẵn sàng. Không cần phần mềm thêm để gửi email từ MSMTP – bạn có thể đơn giản dùng lệnh printf để xây dựng email và pipe nó đến lệnh msmtp:

printf "Subject: Testing\nHello there!." | msmtp -a gmail2 admin@wsxdn.com

"Subject: Testing\nHello there!." – Đây là email sẽ được gửi. Chủ đề được định nghĩa bằng Subject: theo sau là văn bản chủ đề. \n định nghĩa Dòng Mới, theo sau là nội dung email. \n dòng mới bổ sung có thể thêm ở đâu cần để xây dựng tin nhắn văn bản thuần túy có định dạng.

Tùy chọn -a dùng để thiết lập tài khoản email nào email sẽ được gửi từ – nếu không thiết lập, mặc định sẽ được dùng.

Gửi Email Có Đính Kèm Dùng Mutt

Gửi email có đính kèm hơi phức tạp hơn – phần mềm thêm cần thiết để làm cho nó dễ dàng hơn. mutt là một khách email thêm chức năng này với ít phiền toái nhất để dùng trong script.

Cài đặt nó bằng cách chạy:

sudo apt install mutt

mutt có thể cài Postfix mail transfer agent như một phần phụ thuộc – nó sẽ hỏi cấu hình thư. Bạn có thể an toàn chọn No configuration – chúng ta không cần postfix được cấu hình. Như đã nhắc ở đầu bài, chúng ta không muốn gửi thư trực tiếp từ hệ thống này vì nó có khả năng không đến đích do lọc spam.

Giống MSMTP, mutt có cấu hình theo từng người dùng và toàn cục. Chúng ta sẽ dùng cấu hình toàn cục để tất cả người dùng/dịch vụ có thể gửi thư có đính kèm. Tạo và chỉnh sửa tệp dùng trình soạn thảo nano bằng cách chạy:

nano /etc/muttrc

Nhập cấu hình dưới đây (với giá trị thay bằng từ cấu hình thư của bạn):

set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="Your Name"
set admin@wsxdn.com
set envelope_from=yes

mutt giờ đã cấu hình xong và có thể dùng để gửi email có đính kèm:

mutt -a attachment.txt -s "My Subject" -- admin@wsxdn.com < "Email message body"

Cấu Hình Theo Người Dùng So Với Toàn Cục

Ở trên, cấu hình toàn cục đã được định nghĩa. Nếu bạn muốn cấu hình chỉ áp dụng cho một số người dùng – để mỗi người dùng chỉ có thể gửi từ tài khoản của riêng họ, ví dụ – đặt cấu hình trong các tệp sau trong thư mục home của người dùng:

~/.msmtprc
~/.muttrc