Câu trả lời:
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
Các s
lệ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 mutt
lệ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.
set pipe_decode=yes
vào muttrc của mình là những gì Kai von Fintel đang viết.
=
làm điều này.
Nếu bạn touch
là 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.
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 muttrc
ví 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.
formail
trong kịch bản?
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ó.
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-decode
tù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 ;-)