Comment envoyer à nouveau / var / mail / root?

12

Grâce à une mauvaise configuration, j'ai beaucoup d'e-mails dans / var / mail / root et / var / mail / www-data

Comment puis-je "boucler" sur ces fichiers et envoyer chaque courrier une autre fois?

Max
la source

Réponses:

17

formail , une partie de procmail (et probablement déjà disponible sur votre système) peut prendre une boîte aux lettres, la diviser en messages, puis exécuter une commande sur chacun. Depuis la page de manuel:

   -s   The input will be split up into separate mail messages, and  piped
        into  a  program  one  by  one (a new program is started for every
        part).  -s has to be the last option specified, the first argument
        following  it  is  expected to be the name of a program, any other
        arguments will be passed along to it.  If you  omit  the  program,
        then  formail  will  simply  concatenate the split mails on stdout
        again.  See FILENO.

Vous pouvez donc faire ce que je pense que vous voulez comme ceci:

  formail -s /usr/sbin/sendmail -oi -t < /var/mail/root
larsks
la source
3
Mais aussi ce que Kriss a dit au sujet de: l'adressage; cette solution suppose que vous avez corrigé vos alias locaux ou quelque chose pour envoyer les messages ailleurs que dans / var / mail / root. Vous pouvez, par exemple, faire "formail -s / usr / sbin / sendmail -oi [email protected]" pour rediriger tous les messages.
larsks
en supposant que www-data et root sont maintenant correctement configurés, quelque chose comme "for foo in ls /var/mail; do formail -s / usr / sbin / sendmail -oi $ foo <./$foo; done" devrait boucler chaque fichier et livrer localement.
Tom H
3
mutt -f /var/mail/www-data

Puis dans mutt ...

T.*
;b

T le met en mode de balisage et. * Marque tous les messages. Le point-virgule applique la commande suivante à tous les messages balisés, et enfin b "renvoie" les messages à une adresse qu'il demandera.

De mémoire, je pense que soit

D.*

ou

T.*
;d

Videra ensuite la boîte aux lettres.

James Green
la source
0

Les fichiers de boîte aux lettres / var / spool / mail / xxx unix sont de simples fichiers texte dans lesquels les messages électroniques sont conservés dans l'ordre. Chaque message électronique commence par une ligne "De" (taht ne fait pas partie du message) avec l'expéditeur et la date de réception, puis vous obtenez des en-têtes de courrier, puis un corps de courrier.

Fondamentalement, vous pouvez simplement boucler sur le fichier détectant ces lignes From et extraire tous les messages, puis les envoyer en utilisant des outils comme le module smtp python ou le module perl Net :: SMTP de cpan.

Si la cible est une autre boîte aux lettres locale, vous pouvez simplement y ajouter les messages (y compris la ligne De). Vous pouvez même ajouter la boîte aux lettres racine entière à une autre boîte aux lettres si vous ne vous souciez pas non plus d'obtenir des messages vraiment ciblés sur la racine.

Je devrais avoir des scripts qui font ça et publier des exemples si vous voulez.

Le problème peut être d'obtenir la véritable cible du message, car s'ils se terminaient dans la boîte aux lettres racine, ils étaient probablement ciblés pour rooter depuis le début?

kriss
la source