Giao diện email web như Gmail thường kém hiệu quả và không an toàn. Chúng đều yêu cầu bạn luôn kết nối Internet và không hỗ trợ tính năng như gắn thẻ hàng loạt và lọc. Tuy nhiên, nếu bạn đã dùng Emacs soạn thảo văn bản, cũng có thể dùng nó quản lý email.
Trình khách email hiện đại và Emacs
Mặc dù có trình khách email ngoại tuyến như Thunderbird và Evolution, nhưng các chương trình này thường cồng kềnh, không có mọi thứ bạn cần, hoặc không kết hợp tốt với ứng dụng khác.
Ví dụ, Evolution nhận email và lịch nhưng không xử lý soạn thảo văn bản, nhóm tin tức, và danh sách việc cần làm. Điều này tạo trải nghiệm người dùng rời rạc, có thể dẫn đến nhiều vấn đề sau này.
Ngược lại, Emacs hoạt động dựa trên khái niệm tương tác tương thích (interoperability). Trong Emacs, mọi thứ có thể truy cập và thao tác qua cùng một ngôn ngữ thiết kế. Các phím tắt cho hành động cơ bản giống nhau. Hơn nữa, các gói cũng nghiêm ngặt tạo ra và xuất ra văn bản có thể dùng làm đầu vào cho gói khác.
Ví dụ, nếu bạn dùng gnus đọc nhóm tin tức và Org Mode quản lý ghi chú, bạn có thể điều hướng bài viết nhóm tin tức đến bộ đệm Org để chú thích hoặc lưu làm cảm hứng.
Hơn nữa, nếu dùng EMMS quản lý nhạc, nó xuất tiêu đề bài hát hiện tại dưới dạng văn bản. Bạn có thể liên kết này với bài viết blog để nổi bật nhạc bạn đang nghe khi viết.
Emacs làm trình khách Email
Emacs cho phép tích hợp và lưu email trong bộ đệm Org để chú thích hoặc lưu làm mục việc cần làm trong lịch.
Bạn cũng làm ngược lại: viết bài trong bộ đệm Org và gửi, trong Emacs, như email cho ai đó.
Điều này nhờ hai chương trình: Offlineimap và notmuch.
- Offlineimap là chương trình hỗ trợ lấy email từ máy chủ từ xa và lưu trên ổ đĩa. Máy chủ có thể tự host hoặc dịch vụ email như Gmail, Protonmail.
- Notmuch là ứng dụng cực kỳ đơn giản gắn thẻ và hiển thị thư. Nó duy trì cơ sở dữ liệu tất cả thư đã nhận và gắn thẻ theo cài đặt, sau đó hiển thị email trong Emacs dựa trên thẻ đó.
Cài đặt Offlineimap và notmuch
Cài hai ứng dụng này trên Debian và Ubuntu:
sudo apt install offlineimap notmuch
Trên Arch Linux:
sudo pacman -Syu offlineimap notmuch
Trên Fedora:
sudo dnf install offlineimap notmuch
Sau đó, cài gói notmuch đi kèm trong Emacs. Hiện có trong kho MELPA. Có thể cần bật nó trước trong cấu hình Emacs.
Để làm vậy, thêm các dòng lisp sau vào file init.el:
(require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (package-initialize)
Để cài gói notmuch, nhấn Alt + X và gõ package-install. Emacs hỏi tên gói muốn cài. Gõ "notmuch".
Sau khi cài, gói này sẽ đóng vai trò front-end cho chương trình gắn thẻ notmuch.
Thiết lập Offlineimap
Đã xong, bạn cấu hình Offlineimap. Quy trình đơn giản, chủ yếu liên quan đến một file: ".offlineimaprc".
Mặc định, file cấu hình này đọc từ thư mục home. Để tạo, chạy lệnh:
touch /home/$USER/.offlineimaprc
Mở file này bằng trình soạn thảo văn bản yêu thích.
Cấu hình Offlineimap viết theo định dạng INI. Ví dụ, .offlineimaprc cho một tài khoản IMAP đơn giản trông như sau:
[general] accounts = imapaccount [Account imapaccount] localrepository = thismachine remoterepository = thatimap [Repository thismachine] type = Maildir localfolders = /home/$USER/mail/youremail@domain.com [Repository thatimap] type = IMAP remotehost = imap.domain.com remoteuser = youremail@domain.com remotepass = your_password_goes_here ssl = yes sslcacertfile = /your/ca/cert/path/here
- Thể loại general báo cho Offlineimap bạn thiết lập một tài khoản cho cài đặt này.
- Thể loại Account chỉ định nguồn tài khoản đó lấy email, cũng như script muốn chạy khi Offlineimap lấy thư.
- Thể loại Repository báo cho Offlineimap cấu hình cho tài khoản bạn thiết lập. Cài đặt ở đây phụ thuộc lớn vào việc bạn dùng Gmail hay không.
Kho thư email (Email Repositories)
Offlineimap hoạt động bằng cách lưu cấu trúc thư mục email từ xa trên máy tính cục bộ. Cho phép chương trình mô phỏng máy chủ IMAP từ xa và cho trình khách email như notmuch đọc thư mà không cần online.
Thể loại Repository khác biệt tùy bạn thiết lập hộp thư cục bộ hay từ xa. Để tạo hộp thư cục bộ, chỉ cần đặt type là "Maildir". Điều này báo cho Offlineimap kho này trỏ đến vị trí trên máy cục bộ.
[Repository thismachine] type = Maildir localfolders = /home/$USER/mail/youremail@domain.com
Ngược lại, thiết lập kho từ xa hơi phức tạp hơn. Tuy nhiên, khi hiểu ý nghĩa mỗi giá trị trong file cấu hình, thiết lập từ xa rất đơn giản.
Xem lại khối Repository ví dụ:
[Repository thatimap] type = IMAP remotehost = imap.domain.com remoteuser = youremail@domain.com remotepass = your_password_goes_here ssl = yes sslcacertfile = /your/ca/cert/path/here
- Cài đặt type chỉ loại máy chủ bạn muốn Offlineimap kết nối. Ở đây chỉ có hai tùy chọn: Gmail cho Google Mail và IMAP cho tài khoản không phải Google.
- Cài đặt remotehost đặt địa chỉ máy chủ IMAP mà Offlineimap kết nối.
- remoteuser và remotepass là nơi cung cấp thông tin đăng nhập.
- Đặt ssl thành "yes" báo cho Offlineimap bạn muốn kết nối mã hóa đến máy chủ IMAP.
- Tùy chọn sslcacertfile chỉ định chứng chỉ SSL cục bộ. Offlineimap dùng này để xác minh kết nối với máy chủ IMAP.
Kết nối với Gmail
Như mô tả, Offlineimap cung cấp type đặc biệt cho Gmail, vì Google yêu cầu thông tin thêm khi kết nối dịch vụ thư của họ.
Để kết nối Gmail bằng Offlineimap, chỉ cần thay type kho cục bộ và từ xa. Đặt kho cục bộ thành "GmailMaildir" và từ xa thành "Gmail".
Ví dụ, file .offlineimaprc kết nối dịch vụ Gmail trông như sau:
[general] accounts = gmailaccount [Account gmailaccount] localrepository = localgmail remoterepository = remotegmail [Repository localgmail] type = GmailMaildir localfolders = /home/$USER/mail/youremail@gmail.com [Repository remotegmail] type = Gmail maxconnections=1 remotehost = imap.gmail.com remoteuser = youremail@gmail.com remotepass = your_password_goes_here ssl = yes sslcacertfile = /your/ca/cert/path/here
Thiết lập kết nối SSL
Việc tiếp theo là cấu hình Offlineimap kết nối qua SSL. Cần chỉ đường dẫn đến chứng chỉ SSL hệ thống.
Vị trí chứng chỉ SSL phụ thuộc hệ thống bạn chạy. Tuy nhiên, trên Debian và Ubuntu, nằm tại:
ls /etc/ssl/certs/ca-certificates.crt
Bây giờ chạy offlineimap trong terminal để lấy tất cả thư từ máy chủ IMAP từ xa.
Thiết lập notmuch
Tiếp theo, thiết lập notmuch. Theo tên, không có nhiều gì để cấu hình.
Khi đã có thư mục IMAP, chạy notmuch trong dòng lệnh. Sẽ chạy script cấu hình hỏi về thiết lập email cụ thể của bạn.
Với đó, notmuch tạo file cấu hình trong thư mục home. Kiểm tra bằng lệnh:
less /home/$USER/.notmuch-config
Đặt các tùy chọn báo cho notmuch nơi tìm thư mới. Cũng đặt thẻ không muốn lập chỉ mục khi notmuch tìm kiếm qua cơ sở dữ liệu.
Ví dụ, đặt sao cho notmuch không tìm kiếm thư gắn thẻ junk:
[search] exclude_tags = junk
Gắn thẻ email với notmuch
Như bạn nhận ra, bạn không đặt thẻ email trong file cấu hình notmuch, vì notmuch gắn thẻ email trực tiếp từ dòng lệnh.
Điều này cho phép bạn linh hoạt cách dùng notmuch. Ví dụ, đưa lệnh gắn thẻ notmuch vào script chạy định kỳ như cronjob.
Để bắt đầu, trước hết khởi tạo cơ sở dữ liệu notmuch bằng lệnh:
notmuch new
Lệnh này đọc file cấu hình và tạo cơ sở dữ liệu dựa trên mặc định hợp lý. Sau đó, dùng lệnh gắn thẻ notmuch để gắn thẻ cho email đến và email hiện có.
Cú pháp gắn thẻ của Notmuch
Cú pháp gắn thẻ trong notmuch rất trực quan, dạng chung trông như sau:
notmuch tag [+|-]label header:header-property (tag:current-tag)
- Lệnh tag báo cho notmuch các đối số sau sẽ tạo quy tắc gắn thẻ trong hộp thư.
- Tùy chọn label chỉ bạn thêm nhãn (+) hay xóa nhãn hiện có (-). Ví dụ, thư đến mặc định gắn thẻ "unread". Có thể đặt lệnh này thành -unread để xóa thẻ unread.
- Tùy chọn header báo cho notmuch chỉ áp dụng nhãn dựa trên tiêu đề email bạn đặt. Ví dụ, dùng tiêu đề "From:" lọc thư dựa trên người gửi.
- Tùy chọn tag là đối số tùy chọn giới hạn áp dụng quy tắc gắn thẻ cho một thẻ cụ thể. Ví dụ, đặt sao cho notmuch chỉ áp dụng nhãn nếu email đó có thẻ unread.
Xem email trong Emacs
Bạn xem email trong Emacs. Làm bằng cách nhấn Alt + X và gõ notmuch. Tải gói front-end cho notmuch trong Emacs.
Màn hình đến hiển thị vài thẻ tiêu chuẩn mặc định. Tuy nhiên, xem thẻ tùy chỉnh bằng cách nhấp nút "[show]" bên cạnh "All Tags". Cũng truy cập thẻ bằng S và gõ "is:tag_name" trong bộ đệm lệnh.
Các phím di chuyển và chỉnh sửa Emacs tiêu chuẩn cũng hoạt động trong notmuch. Hơn nữa, có thêm tính năng lọc email tốt hơn.
Ví dụ, kích hoạt xem "tree-style" bằng Shift + Z khi xem thẻ cụ thể. Hữu ích khi đăng ký mailing list vì hiển thị email theo luồng dễ theo dõi.
Thiết lập Emacs gửi Email
Bây giờ bạn có thư mục email hoạt động đọc trong Emacs. Tuy nhiên, vẫn cần thiết lập cách gửi thư. May mắn thay, điều này dễ làm trong Emacs.
Để bật hỗ trợ email, thêm các dòng lisp sau vào file init.el:
(setq mail-user-agent 'message-user-agent) (setq message-send-mail-function 'smtpmail-send-it smtpmail-stream-type 'starttls smtpmail-smtp-server "mail.domain.com" smtpmail-smtp-service 587)
- mail-user-agent đặt biến user-agent dùng message-user-agent của Emacs. Xác định email gửi đi từ Emacs, cho phép giao tiếp với máy chủ thư khác.
- message-send-mail-function báo cho Emacs dùng gói
smtpmailtích hợp để gửi email đúng cách. - smtpmail-stream-type chỉ loại kết nối Emacs dùng khi kết nối máy chủ thư từ xa. Hầu hết máy chủ thư hiện nay dùng SSL/TLS hoặc STARTTLS.
- smtpmail-smtp-server đặt địa chỉ máy chủ SMTP muốn kết nối.
- smtpmail-smtp-service đặt cổng Emacs dùng gửi gói SMTP. Nếu dùng SSL/TLS, ghi 465. Nếu dùng STARTTLS, ghi 587.
Thiết lập xác thực Email dùng .authinfo
Cần cho phép Emacs gửi email qua tài khoản thư. Làm bằng cách thêm thông tin đăng nhập email vào .authinfo.
File .authinfo là file ẩn lưu thông tin đăng nhập khi đăng nhập dịch vụ từ xa. Phần lớn không có mặc định trong cài Linux. Tuy nhiên, tạo file này bằng lệnh:
touch /home/$USER/.authinfo
Điều quan trọng: file này chứa thông tin nhạy cảm như tên người dùng và mật khẩu. Cần bảo mật quyền truy cập để chỉ bạn đọc/ghi. Chạy lệnh:
chmod 600 /home/$USER/.authinfo
Chỉnh sửa .authinfo chứa thông tin tài khoản thư. Cú pháp chung trông như sau:
machine mail.domain.com login username@domain.com port 587 password mypasswordis123
- Biến machine báo cho Emacs bạn kết nối đến máy/chủ máy khác.
- Tên miền chỉ đây là địa chỉ máy bạn muốn kết nối.
- Trường login đặt địa chỉ email.
- Tùy chọn port đặt cổng cụ thể Emacs kết nối. Nên giống số cổng đặt trong init.el.
- Biến password chứa mật khẩu tài khoản email.
Tải lại Emacs để áp dụng cài đặt mới.
Gửi email đầu tiên trong Emacs
Với đó, gửi email từ Emacs cực kỳ dễ. Làm bằng Ctrl + X, M hoặc nhấn M trong bộ đệm notmuch.
Các phím tắt này thực thi lệnh composemail, tạo bộ đệm tin nhắn với tiêu đề trống để bạn gõ email.
Xong rồi, nhấn Ctrl + C, Ctrl + C gửi email đầu tiên từ Emacs.
Chúc mừng! Bạn đã thiết lập thành công Emacs làm trình khách email. Hơn nữa, bạn cũng hiểu cơ bản cách máy chủ IMAP và SMTP hoạt động cũng như cơ bản thiết lập hệ thống gắn thẻ email.
Nếu thảo luận này làm bạn quan tâm những gì khác làm được với Emacs, xem năm gói hữu ích cho trình soạn thảo mở rộng này.
Câu hỏi thường gặp
1. Có thể tự động gắn thẻ email sau khi chạy offlineimap không?
Làm bằng cách tạo hook notmuch post-sync trong Offlineimap. Chèn biến dưới thể loại Account tên "postsynchook":
... [Account imapaccount] localrepository = thismachine remoterepository = thatimap postsynchook = /path/to/your/script.sh ...
Biến này chứa đường dẫn file đến script thực thi chứa lệnh notmuch đặt thẻ.
Ví dụ, script post-sync đơn giản xóa thẻ unread từ email mailing list đến và gắn thẻ phù hợp:
#!/bin/sh notmuch new notmuch tag -inbox -unread +mailing-list from:mailing-list or to:mailing-list@domain.com tag:inbox notmuch tag -inbox -unread +mailinglist-cmd from:mailing-list-cmd@domain.com tag:inbox
2. Tôi viết email nhưng quyết định không gửi. Làm sao hủy email trong Emacs?
Hủy email trong Emacs bằng Ctrl + C, Ctrl + D trong bộ đệm tin nhắn. Sẽ gắn thẻ email là bản nháp hủy bỏ và Emacs xóa sau một thời gian.
3. Có thể sửa thẻ email bên trong notmuch trong Emacs không?
Có! Làm bằng Shift + = trong bộ đệm notmuch. Mở bộ đệm lệnh nhỏ chỉ định thẻ muốn thêm/xóa từ email cụ thể.