小智 33
该s
命令将保存到一个邮箱中,该邮箱为 maildir 格式。不幸的是,没有保存到文件命令,也许是因为在历史 mbox 格式中,包含单个邮件的邮箱只是包含该邮件的文件。
该mutt
命令管消息(默认快捷键|
)可以被用于此目的。它打开一个命令行,你写cat > DESIRED-FILE-PATH
.
当您以这种方式保存消息时,“管道解码”选项控制标题和 MIME 部分会发生什么。
人们可能会为此功能编写一个宏。
rem*_*mmy 10
如果您创建touch
一个文件,然后尝试将消息保存或复制到其中,mutt 会将其用作 mbox。
您也可能想使用复制而不是保存。Mutt 假设一封邮件应该只存在于一个副本中,将邮件保存到另一个邮箱会将其从第一个邮箱中删除,而复制则会进行正确的复制。
Kai von Fintel的答案非常有效,但我只是想分享一个宏来简化这个过程。
\n首先,在muttrc
:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"\n
Run Code Online (Sandbox Code Playgroud)\n这会将完整的电子邮件(包括标题和附件)传送到以下脚本。在 处创建一个可执行文件~/.local/bin/file_email
。
#!/usr/bin/env bash\n# Save piped email to "$1/YYMMDD SUBJECT.eml"\n\n# Don\'t overwrite existing file\nset -o noclobber\n\nmessage=$(cat)\n\nmail_date=$(<<<"$message" grep -oPm 1 \'^Date: ?\\K.*\')\nformatted_date=$(date -d"$mail_date" +%y%m%d)\n# Get the first line of the subject, and change / to \xe2\x88\x95 so it\'s not a subdirectory\nsubject=$(<<<"$message" grep -oPm 1 \'^Subject: ?\\K.*\' | sed \'s,/,\xe2\x88\x95,g\')\n\nif [[ $formatted_date == \'\' ]]; then\n echo Error: no date parsed\n exit 1\nelif [[ $subject == \'\' ]]; then\n echo Warning: no subject found\nfi\n\necho "${message}" > "$1/$formatted_date $subject.eml" && echo Email saved to "$1/$formatted_date $subject.eml"\n
Run Code Online (Sandbox Code Playgroud)\n该脚本将文件保存到第一个参数(即在muttrc
上面的示例中,电子邮件将保存到/tmp
)。文件名的格式为YYMMDD SUBJECT.eml
. 它还会转换/
为\xe2\x88\x95
以防止创建子目录。