Lưu email dưới dạng tập tin trong mutt?


28

Khi tôi nhấn Strong mutt, nó sẽ lưu thư vào định dạng thư mục thư ( cur/ tmp/ new/), nhưng tôi muốn một tệp duy nhất được lưu, giống như cách lưu tệp đính kèm.

Là cấu hình?

Câu trả lời:


23

Thông báo thực tế cũng hiển thị dưới dạng tệp đính kèm, vì vậy bạn có thể lưu nó từ danh sách tệp đính kèm. Từ chỉ mục hoặc chính thông báo, nhấn vđể mở tệp đính kèm và slưu


Chỉ cần một lưu ý: nếu thư email của bạn chứa tệp đính kèm, thì chỉ lưu mục nhập đầu tiên từ danh sách tệp đính kèm sẽ lưu thư - nhưng không có tệp đính kèm bên trong.
sdaau

3
Một lưu ý khác: điều này không lưu bất kỳ tiêu đề nào, bao gồm người gửi, người nhận và chủ đề.
Sparhawk

31

Các slệnh tiết kiệm đến một hộp thư, trong đó cho bạn là ở định dạng maildir. Thật không may, không có lệnh lưu vào tập tin, có lẽ vì trong định dạng mbox lịch sử, một hộp thư chứa một thư chỉ là một tệp chứa thư đó.

Các muttlệnh ống nhắn (phím tắt mặc định |) có thể được sử dụng cho việc này. Nó mở một dòng lệnh và bạn viết cat > DESIRED-FILE-PATH.

Tùy chọn "giải mã đường ống" kiểm soát những gì xảy ra với các phần đầu và phần mime khi bạn lưu tin nhắn theo cách này.

Một người có thể có thể viết một macro cho chức năng này.


Thật tuyệt, điều này cũng có thể cứu các tiêu đề, nhưng bây giờ, tôi sẽ sử dụng cách của Michael, cảm ơn!
hoa cúc

1
Điều này hoạt động tốt và cung cấp một cách hiệu quả để lưu hơn 50 email (sử dụng gắn thẻ phù hợp với mẫu) vào tệp. Tôi đã phải đào sâu một chút để thấy rằng bằng cách thêm set pipe_decode=yesvào muttrc của mình là những gì Kai von Fintel đang viết.
Màn hình

đồng thời, điều này cũng lưu các tệp đính kèm trong tệp email đã xuất.
sdaau

Điều này là tốt, nhưng tôi thấy ngắt dòng chưa được xử lý với =làm điều này.
Jack Wasey

Tuyệt vời. Nó hiệu quả tuyệt vời đối với tôi. Tôi chỉ muốn trích xuất hơn 20 email từ một Maildir lỗi thời. Chúc mừng!
prageeth

10

Nếu bạn touchlà một tập tin và sau đó cố gắng lưu hoặc sao chép một tin nhắn vào nó thì mutt sẽ sử dụng nó như một mbox.

Ngoài ra, bạn có thể muốn sử dụng bản sao thay vì lưu. Mutt giả định rằng một thư chỉ nên tồn tại trong một bản sao và lưu thư vào hộp thư khác sẽ xóa nó khỏi thư đầu tiên, trong khi sao chép sẽ thực hiện một bản sao thích hợp.


1
Tôi cần phải nhận được thông báo với các tiêu đề đầy đủ để dán nó vào tập lệnh kiểm tra bộ lọc và điều này đã hoạt động hoàn hảo.
Soren Bjornstad

2

Câu trả lời của Kai von Fintel hoạt động hoàn hảo, nhưng tôi chỉ nghĩ rằng mình sẽ chia sẻ một macro để hợp lý hóa quy trình này.

Thứ nhất, trong muttrc:

macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"

Điều này chuyển toàn bộ email (bao gồm các tiêu đề và tệp đính kèm) vào tập lệnh sau. Tạo một tập tin thực thi tại ~/.local/bin/file_email.

#!/usr/bin/env bash
# Save piped email to "$1/YYMMDD SUBJECT.eml"

# Don't overwrite existing file
set -o noclobber

message=$(cat)

mail_date=$(<<<"$message" grep -oPm 1 '^Date: ?\K.*')
formatted_date=$(date -d"$mail_date" +%y%m%d)
# Get the first line of the subject, and change / to ∕ so it's not a subdirectory
subject=$(<<<"$message" grep -oPm 1 '^Subject: ?\K.*' | sed 's,/,∕,g')

if [[ $formatted_date == '' ]]; then
  echo Error: no date parsed
  exit 1
elif [[ $subject == '' ]]; then
  echo Warning: no subject found
fi

echo "${message}" > "$1/$formatted_date $subject.eml" && echo Email saved to "$1/$formatted_date $subject.eml"

Kịch bản lệnh này lưu tệp vào đối số đầu tiên (nghĩa là trong muttrcví dụ trên, email sẽ lưu vào /tmp). Định dạng của tên tập tin là YYMMDD SUBJECT.eml. Nó cũng chuyển đổi /để ngăn chặn việc tạo ra các thư mục con.


Sẽ không dễ sử dụng hơn formailtrong kịch bản?
0andriy

@ 0andriy Tôi không quen formail, vì vậy tôi đã đọc. Tuy nhiên, tôi không hoàn toàn chắc chắn phần nào trong kịch bản của tôi mà bạn đang đề cập đến? Sử dụng formailđể trích xuất chủ đề và ngày? Nếu vậy, có lẽ là một ý tưởng tốt đẹp. Tôi mong bạn viết một câu trả lời; Tôi chắc chắn sẽ nâng cấp nó.
Sparhawk

0

Tôi đã thử tất cả các câu trả lời được đề xuất nhưng không thể nhận được e-mail thô, nhiều phần (văn bản / văn bản + văn bản / html) được lưu vào một tệp, bao gồm các tiêu đề và mọi thứ. Tôi cần điều này để cung cấp bộ lọc thư rác của mình với e-mail để dạy nó, rằng một thư cụ thể có phải là thư rác hay không ...

Giải pháp tôi đưa ra là nhấn e(tức là "chỉnh sửa tin nhắn") trên tin nhắn đang mở, mở tin nhắn thô trong trình soạn thảo bạn chọn. Nguyên ở đây có nghĩa là, bạn nhận được thông báo chính xác như đã đến trong mutt, vì vậy bạn có tất cả các tiêu đề và tất cả các byte chứa thông điệp.

Sau khi nhấn e, tôi chỉ cần viết bộ đệm (tôi đặt trình chỉnh sửa thành vim ) vào một tệp :w <path_to_file>/<file_name>và đó là nó.

PS: Tôi đã có thể thêm điều này dưới dạng bình luận nhưng bạn cần một mức độ danh tiếng nhất định để làm điều này. Ngoài ra, tôi biết câu hỏi rất cũ nhưng vì neomutt vẫn được nhiều người sử dụng, tôi nghĩ rằng điều này có thể giúp được ai đó.

Cập nhật: Tôi đã bỏ qua pipe-decodetùy chọn mà Kai đang nói đến. Với tùy chọn đó được đặt chính xác, nó cũng sẽ hoạt động thông qua |. Vẫn là giải pháp của tôi đang hoạt động ;-)

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.