Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cách sử dụng Email trong Emacs

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 smtpmail tí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ể.