将电子邮件保存为 mutt 中的文件?

dai*_*isy 31 mutt

当我按下Smutt 时,它会将邮件保存为邮件文件夹格式 ( cur/ tmp/ new/),但我希望保存单个文件,就像保存附件的方式一样。

那可以配置吗?

小智 33

s命令将保存到一个邮箱中,该邮箱为 maildir 格式。不幸的是,没有保存到文件命令,也许是因为在历史 mbox 格式中,包含单个邮件的邮箱只是包含该邮件的文件。

mutt命令管消息(默认快捷键|)可以被用于此目的。它打开一个命令行,你写cat > DESIRED-FILE-PATH.

当您以这种方式保存消息时,“管道解码”选项控制标题和 MIME 部分会发生什么。

人们可能会为此功能编写一个宏。


Mic*_*zek 29

实际消息也显示为附件,因此您可以将其从附件列表中保存。从索引或邮件本身,点击v打开附件并s保存

  • 另一个注意事项:这不会保存任何标题,包括发件人、收件人和主题。 (5认同)

rem*_*mmy 10

如果您创建touch一个文件,然后尝试将消息保存或复制到其中,mutt 会将其用作 mbox。

您也可能想使用复制而不是保存。Mutt 假设一封邮件应该只存在于一个副本中,将邮件保存到另一个邮箱会将其从第一个邮箱中删除,而复制则会进行正确的复制。


Spa*_*awk 6

Kai von Fintel答案非常有效,但我只是想分享一个宏来简化这个过程。

\n

首先,在muttrc

\n
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"\n
Run Code Online (Sandbox Code Playgroud)\n

这会将完整的电子邮件(包括标题和附件)传送到以下脚本。在 处创建一个可执行文件~/.local/bin/file_email

\n
#!/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以防止创建子目录。

\n