Lorsque j'appuie sur S
mutt, il enregistre le courrier dans un format de dossier de messagerie ( cur/ tmp/ new/
), mais je veux qu'un seul fichier soit enregistré, tout comme la façon dont les pièces jointes sont enregistrées.
Est-ce configurable?
Lorsque j'appuie sur S
mutt, il enregistre le courrier dans un format de dossier de messagerie ( cur/ tmp/ new/
), mais je veux qu'un seul fichier soit enregistré, tout comme la façon dont les pièces jointes sont enregistrées.
Est-ce configurable?
Réponses:
Le message réel s'affiche également en tant que pièce jointe, vous pouvez donc l'enregistrer à partir de la liste des pièces jointes. À partir de l'index ou du message lui-même, appuyez sur vpour ouvrir les pièces jointes et spour enregistrer
La s
commande enregistre dans une boîte aux lettres, qui pour vous est au format maildir. Malheureusement, il n'y a pas de commande d'enregistrement dans un fichier, peut-être parce que dans le format mbox historique, une boîte aux lettres qui contient un seul courrier n'est qu'un fichier contenant ce courrier.
La mutt
commande pipe-message (raccourci par défaut |
) peut être utilisée pour cela. Il ouvre une ligne de commande et vous écrivez cat > DESIRED-FILE-PATH
.
L'option "pipe-decode" contrôle ce qui arrive aux en-têtes et aux parties MIME lorsque vous enregistrez un message de cette façon.
On pourrait probablement écrire une macro pour cette fonctionnalité.
set pipe_decode=yes
à mon muttrc, c'était ce sur quoi Kai von Fintel écrivait.
=
cela.
Si vous touch
utilisez un fichier, puis essayez d'enregistrer ou de copier un message, mutt l'utilisera comme mbox.
Vous pouvez également utiliser la copie au lieu de la sauvegarder. Mutt suppose qu'un courrier ne devrait exister qu'en une seule copie et l'enregistrement d'un message dans une autre boîte aux lettres le supprimera de la première, tandis que la copie fera une copie appropriée.
La réponse de Kai von Fintel fonctionne parfaitement, mais je pensais juste partager une macro pour rationaliser ce processus.
Premièrement, dans muttrc
:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"
Cela redirige l'e-mail complet (y compris les en-têtes et les pièces jointes) vers le script suivant. Créez un fichier exécutable à ~/.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"
Ce script enregistre le fichier dans le premier argument (c'est-à-dire dans l' muttrc
exemple ci-dessus, l'e-mail sera enregistré dans /tmp
). Le format du nom de fichier est YYMMDD SUBJECT.eml
. Il se convertit également /
en ∕
pour empêcher la création de sous-répertoires.
formail
dans le script?
formail
, j'ai donc lu. Cependant, je ne sais pas exactement à quelle partie de mon script vous faisiez référence? Vous utilisez formail
pour extraire le sujet et la date? Si oui, probablement une bonne idée. Je vous exhorte à écrire une réponse; Je le voterais sans aucun doute.
J'ai essayé toutes les réponses suggérées, mais je n'ai pas pu enregistrer le courrier électronique brut en plusieurs parties (texte / texte + texte / html) dans un fichier, y compris ses en-têtes et tout le reste. J'en avais besoin pour alimenter mon filtre anti-spam avec l'e-mail pour lui apprendre qu'un mail spécifique est du spam ou non ...
La solution que j'ai trouvée consiste à appuyer e
(c'est-à-dire "modifier le message") sur le message ouvert, ce qui ouvre le message brut dans l'éditeur de votre choix. Raw signifie ici que vous obtenez le message exactement tel qu'il est arrivé dans mutt, vous avez donc tous les en-têtes et tous les octets qui composent le message.
Après avoir frappé e
, j'écris simplement le tampon (j'ai défini l'éditeur sur vim ) dans un fichier avec :w <path_to_file>/<file_name>
et c'est tout.
PS: j'aurais ajouté ceci comme commentaire mais vous avez besoin d'un certain niveau de réputation pour ce faire. De plus, je sais que la question est très ancienne mais comme le neomutt est encore utilisé par beaucoup de gens, j'ai pensé que cela pourrait aider quelqu'un.
Mise à jour: j'ai ignoré l' pipe-decode
option dont Kai parlait. Avec cette option correctement définie, cela aurait également fonctionné via |
. Ma solution fonctionne toujours aussi ;-)