¿Guardar correo electrónico como archivo en mutt?

28

Cuando Spresiono en mutt, guarda el correo en un formato de carpeta de correo ( cur/ tmp/ new/), pero quiero que se guarde un solo archivo, al igual que se guardan los archivos adjuntos.

¿Es eso configurable?

margarita
fuente

Respuestas:

23

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

Michael Mrozek
fuente
Solo una nota: si su mensaje de correo electrónico contiene archivos adjuntos, al guardar solo la primera entrada de la lista de archivos adjuntos se guardará el mensaje, pero sin los archivos adjuntos incluidos en el interior.
sdaau
3
Otra nota: esto no guarda ningún encabezado, incluidos el remitente, el destinatario y el asunto.
Sparhawk
31

El scomando 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 muttcomando 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.

Kai von Fintel
fuente
Genial, esto también puede salvar los encabezados, pero por ahora, usaría el camino de Michael, ¡gracias!
margarita
1
Esto funciona bien y proporciona una manera eficiente de guardar más de 50 correos electrónicos (usando el etiquetado de coincidencia de patrones) en el archivo. Tuve que cavar un poco para descubrir que al agregar set pipe_decode=yesa mi muttrc era sobre lo que Kai von Fintel estaba escribiendo.
Screenack
Además, esto también guarda los archivos adjuntos en el archivo de correo electrónico exportado.
sdaau
Esto está bien, pero veo saltos de línea sin procesar al =hacer esto.
Jack Wasey
Increíble. Esto funciono muy bien para mi. Solo quería extraer más de 20 correos electrónicos de un Maildir obsoleto. ¡Aclamaciones!
prageeth
10

Si tiene touchun 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.

kyrias
fuente
1
Necesitaba recibir el mensaje con los encabezados completos para pegarlo en un script de prueba de filtro, y esto funcionó perfectamente.
Soren Bjornstad
2

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 muttrcejemplo 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.

Gavilán
fuente
¿No sería más fácil de usar formailen el script?
0andriy
@ 0andriy No estoy familiarizado formail, así que tuve una lectura. Sin embargo, no estoy completamente seguro de a qué parte de mi script se refería. ¿Utilizando formailpara extraer asunto y fecha? Si es así, probablemente sea una buena idea. Te insto a que escribas una respuesta; Definitivamente lo votaría.
Sparhawk
0

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-decodeopció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 ;-)

m4110c
fuente