Respuestas:
El mensaje real también se muestra como un archivo adjunto, por lo que puede guardarlo en la lista de archivos adjuntos. Desde el índice o el mensaje en sí, presione vpara abrir los archivos adjuntos y sguardar
El s
comando guarda en un buzón, que para usted está en formato maildir. Desafortunadamente, no hay un comando para guardar en archivo, quizás porque en el formato histórico de mbox, un buzón que contiene un solo correo es solo un archivo que contiene ese correo.
El mutt
comando pipe-message (acceso directo predeterminado |
) se puede utilizar para esto. Abre una línea de comando y escribes cat > DESIRED-FILE-PATH
.
La opción "decodificación de tubería" controla lo que sucede con los encabezados y las partes MIME cuando guarda un mensaje de esta manera.
Probablemente se podría escribir una macro para esta funcionalidad.
set pipe_decode=yes
a mi muttrc era sobre lo que Kai von Fintel estaba escribiendo.
=
hacer esto.
Si tiene touch
un archivo y luego intenta guardar o copiar un mensaje, mutt lo usará como mbox.
También es posible que desee utilizar copiar en lugar de guardar. Mutt supone que un correo solo debe existir en una copia y guardar un mensaje en otro buzón lo eliminará del primero, mientras que la copia hará una copia adecuada.
La respuesta de Kai von Fintel funciona perfectamente, pero pensé en compartir una macro para simplificar este proceso.
Primero, en muttrc
:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"
Esto canaliza el correo electrónico completo (incluidos encabezados y archivos adjuntos) al siguiente script. Cree un archivo ejecutable en ~/.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"
Este script guarda el archivo en el primer argumento (es decir, en el muttrc
ejemplo anterior, el correo electrónico se guardará en /tmp
). El formato del nombre del archivo es YYMMDD SUBJECT.eml
. También convierte /
a ∕
para evitar la creación de subdirectorios.
formail
en el script?
formail
, así que tuve una lectura. Sin embargo, no estoy completamente seguro de a qué parte de mi script se refería. ¿Utilizando formail
para extraer asunto y fecha? Si es así, probablemente sea una buena idea. Te insto a que escribas una respuesta; Definitivamente lo votaría.
He intentado todas las respuestas sugeridas, pero no pude obtener el correo electrónico en bruto, multiparte (texto / texto plano + texto / html) para guardarlo en un archivo, incluidos sus encabezados y todo. Necesitaba esto para alimentar mi filtro de spam con el correo electrónico para enseñarle que un correo específico es spam o no ...
La solución que se me ocurrió es presionar e
(es decir, "editar mensaje") en el mensaje abierto, que abre el mensaje sin procesar en el editor de su elección. Raw aquí significa que obtienes el mensaje exactamente como llegó en mutt, por lo que tienes todos los encabezados y todos los bytes que componen el mensaje.
Después de presionar e
, simplemente escribo el búfer (configuré el editor en vim ) en un archivo con :w <path_to_file>/<file_name>
y eso es todo.
PD: Hubiera agregado esto como comentario, pero necesitas un cierto nivel de reputación para hacerlo. Además, sé que la pregunta es muy antigua, pero como muchas personas todavía usan el neomutt , pensé que esto podría ayudar a alguien.
Actualización: pasé por alto la pipe-decode
opción de la que Kai estaba hablando. Con esa opción configurada correctamente, también habría funcionado |
. Aún así, mi solución también está funcionando ;-)