Làm cách nào tôi có thể sử dụng mutt với bộ nhớ cục bộ, IMAP và đẩy email mới ngay lập tức?


8

Tôi đang suy nghĩ về việc chuyển sang muttemail. Tuy nhiên, tôi có một vài yêu cầu.

  1. Tôi muốn có thể lưu trữ email ngoại tuyến.
  2. Tôi muốn gửi email ngay lập tức đến máy tính cục bộ của mình thay vì bỏ phiếu định kỳ (ví dụ: sử dụng IMAP IDLE).

Để lưu trữ ngoại tuyến, tôi có thể sử dụng imapofflinehoặc isync. Tôi hiểu rằng sau này ổn định hơn. Tuy nhiên, để email được đẩy theo yêu cầu, tùy chọn duy nhất tôi tìm thấy cho isync là mswatch . Thật không may, điều này đòi hỏi một chương trình được cài đặt trên máy chủ email từ xa, điều này là không thể. Có giải pháp nào cho phép tôi sử dụng mutt, với lưu trữ email ngoại tuyến và gửi email tức thì không?


Bạn đã xem xét yêu cầu sysadmin máy chủ email của bạn?
cas

@cas Có, nhưng tôi đoán có thể đơn giản và nhanh hơn khi chỉ tự mình kiểm tra nó. Và một câu trả lời "dứt khoát" hơn, vì đây có lẽ là một trường hợp hiếm gặp.
Sparhawk

dù sao bạn cũng nên hỏi họ vì họ có thể phản đối bạn cài đặt mswatch hoặc phần mềm khác trên máy chủ của họ
cas

@cas Có lẽ tôi hiểu nhầm, nhưng tôi nghĩ rằng mswatch chỉ được cài đặt cục bộ.
Sparhawk

1
trang web mswatch cho biết "mswatch giám sát các cửa hàng thư để thay đổi bằng cách tự chạy trên cả máy khách và máy chủ (bắt buộc phải truy cập shell cho từng máy chủ)". tôi đoán điều đó có nghĩa là nó cần phải được cài đặt trên cả hai.
cas

Câu trả lời:


5

Cách duy nhất để 'đẩy' thư ngay lập tức đến máy khách của bạn là cho máy chủ thực hiện ngay khi thư được gửi. Điều này chắc chắn sẽ yêu cầu phần mềm được cài đặt và chạy trên máy chủ thư, vì vậy mọi giải pháp tiềm năng sẽ có cùng một vấn đề như mswatch.

Bỏ phiếu thường xuyên có lẽ là lựa chọn tốt nhất của bạn.

Theo kinh nghiệm của tôi, chạy offlineimaphoặc tương tự từ cron cứ sau vài phút hoạt động đủ tốt.

Một số chương trình tìm nạp hỗ trợ lệnh imap IDLE. IDLE không chính xác là 'đẩy' (vì thư vẫn được máy khách lấy từ máy chủ) nhưng thường dẫn đến cập nhật gần như tức thì cho hộp thư cục bộ của bạn.

offlineimap hỗ trợ nó nhưng hướng dẫn sử dụng cho biết "Hỗ trợ IDLE chưa hoàn chỉnh và thử nghiệm. Có thể gặp lỗi."

fetchmail hỗ trợ IDLE kể từ phiên bản 5.0


Có lẽ (một lần nữa) tôi hiểu lầm. Hiện tại với Thunderbird, tôi có thể đặt thành "Sử dụng lệnh IDLE nếu máy chủ hỗ trợ". Tôi nghĩ rằng điều này thiết lập một kết nối vĩnh viễn với máy chủ email, để gửi email là ngay lập tức. Điều này hoạt động tốt ngoài hộp cho các máy chủ email của tôi (NetOrigin, Gmail, mail.com, v.v.).
Sparhawk

Vâng đó là sự thật. nhưng thực tế có rất ít hoặc không có sự khác biệt nào đối với người dùng cuối - IDLE giữ kết nối mở (sử dụng các tài nguyên như mô tả tệp trên máy chủ) và bỏ phiếu kết nối & ngắt kết nối thường xuyên. có nhiều chi phí hơn với việc bỏ phiếu, nhưng nếu máy chủ thư của bạn không thể đối phó với điều đó thì sẽ có những vấn đề lớn hơn đối với các hệ thống để giải quyết.
cas

BTW, offlineimapcó một số hỗ trợ cho IDLE nhưng hướng dẫn sử dụng cho biết "Hỗ trợ IDLE chưa hoàn chỉnh và thử nghiệm. Có thể gặp phải lỗi."
cas

Theo kinh nghiệm của tôi, IDLE có (chậm nhất là vài giây) trước khi tìm nạp email. OTOH, nhiều ứng dụng email có thời gian bỏ phiếu mặc định của đơn hàng là ~ 5 phút. Tôi tưởng tượng rằng đặt nó thành (giả sử) 10 giây sẽ không lý tưởng. Từ việc tìm kiếm trên web, một cú đánh sớm cho biết Don't set the automatic send/receive interval too short [less than 5 minutes] or you could end up endlessly polling the mail server, send/receive errors and sometimes even duplicates (mặc dù điều này là dành cho một khách hàng cụ thể).
Sparhawk

fetchmailcũng hỗ trợ IDLE kể từ v5.0 fetchmail.info/fetchmail-features.html
cas

4

Thật không may, hai khả năng được đề xuất trong câu trả lời khác là không hoàn hảo. offlineimaplà khá lỗi tại thời điểm tốt nhất. Ví dụ, không có cách nào để tự động chạy tập lệnh sau khi thư mới đến. fetchmailkhông đồng bộ hóa hai chiều.

Thay vào đó, giải pháp mà tôi đã sử dụng là sự kết hợp giữa imapnotifyisync . Tôi đã cấu hình imapnotifyđể chạy tập lệnh khi thư mới được kích hoạt (thông qua IDLE).

Kịch bản này chạy mbsync "${channel}:INBOX"tùy thuộc vào tài khoản nào có thư. Tiếp theo nó chạy notmuch new. Cuối cùng, nó ghi lại số lượng email chưa đọc vào một tập tin như dưới đây. Nội dung của tệp này được hiển thị trên bảng điều khiển môi trường máy tính để bàn của tôi.

mail_count_file="/home/foo/.cache/new_mail_count"
new_count=$(find ~/.mail/*/Inbox/new -type f | wc -l)
if [[ $new_count > 0 ]]; then
  echo $new_count > "$mail_count_file"
else
  if [[ -f "$mail_count_file" ]]; then
    rm "$mail_count_file"
  fi
fi

Cập nhật

imapnotify (nodejs-imapnotify) ngắt kết nối thường xuyên mà không có cảnh báo / lỗi và thường bỏ lỡ thư mới. python-imapnotify cũng hoạt động không liên tục. Tuy nhiên, goimapnotify hoạt động rất tốt trong kinh nghiệm của tôi. Nó hiếm khi rơi ra, và khi nó xảy ra (ví dụ do ngắt kết nối mạng và / hoặc tạm dừng chu kỳ), nó sẽ nhanh chóng tự khởi động lại mà không phiền phức.


Bạn có thể chạy tập lệnh ngay sau khi thư đến offlineimap: sử dụng postsynchooktùy chọn trong cấu hình; đó là cách tôi chạy notmuch new...
jasonwryan

@jasonwryan Đó có phải là IDLE cụ thể không? Tôi không phải là 100% nếu tôi hiểu chính xác, nhưng điều này nói"No hook exists for “run after an IDLE response”. Email will show up, but may not be processed until the next refresh cycle."
Sparhawk

Không, tôi không sử dụng Idle ...
jasonwryan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.