Comment utiliser procmail pour obtenir un message dans une variable

J'essaie d'obtenir les modifications enregistrées par notre installation RANCID pour être enregistrées et envoyées à un système de diffusion de communication interne que nous avons. Je peux en parler directement via netcat, par exemple, cela fonctionnera:

echo "Hello world" | netcat localhost 12345 

RANCID envoie des modifications par courrier électronique, alors j'essaie d'utiliser procmail pour intercepter ces courriels et les envoyer à notre pastebin local, puis canaliser la réponse (qui contient l'URL) à netcat.

Je peux reproduire tout ce flux sur la ligne de commande comme suit:

 testmail=$(cat testmail.txt) URL=$(curl --silent -d "text=$testmail" -d "title=Logged Activity" http://paste/api/create) && echo "RANCID logged some changes: $URL" | netcat localhost 12345 

Voici mon .procmailrc pour le moment:

 ## store the body in MESSAGE :0 b MESSAGE=| ##Send that message to Wirehive pastebin :0 | URL=$(curl -d "text=$MESSAGE" -d "title=Logged Activity" http://paste/api/create) && echo "RANCID logged some changes: $URL" | netcat localhost 12345 

En vérifiant le journal du courrier, le routage du courrier fonctionne bien. Avec le fichier tous commenté et en vérifiant la boîte aux lettres des utilisateurs récepteurs dans mutt, je peux voir le message entrer. Avec le fichier en panne, le message n'apparaît pas dans la boîte aux lettres, donc .procmailrc est en cours de traitement et le message est transmis.

Il est probablement utile de noter que c'est sur Ubuntu 12.04.

One Solution collect form web for “Comment utiliser procmail pour obtenir un message dans une variable”

L'affectation MESSAGE ne fonctionne pas comme vous l'avez écrit. Essaye ça:

 :0b MESSAGE=| cat 

En outre, l'affectation URL=... n'est pas une commande valide; Vous devez refactoriser l'affectation des variables pour être en dehors de la recette:

 URL=`curl --silent -d "text=$testmail" -d "title=Logged Activity" http://paste/api/create` :0 | echo "RANCID logged some changes: $URL" | netcat localhost 12345 

… ou peut-être que vous pourriez le faire en faisant appel à un shell, généralement en ajoutant l'un des SHELLMETAS :

 :0 # notice semicolon at end | URL=$(curl -d "text=$MESSAGE" -d "title=Logged Activity" http://paste/api/create) \ && echo "RANCID logged some changes: $URL" | netcat localhost 12345 ; 

… mais j'aime vraiment l'ancienne alternative, plus lisible.

Si vous pouvez refactoriser la ligne de commande curl pour lire l'entrée standard et l'écriture sur la sortie standard, cela pourrait être rendu plus élégant, au moins afin d'éviter la variable MESSAGE séparée, et peut-être même être refacturée en un seul trait.

  • BackupPC ne réalise pas de sauvegarde
  • Verrouillé sur le count d'user sur Ubuntu 12.04. Impossible de se connecter
  • apt-get update getting 400 URI Failure message
  • Comment forcer s3fs mount on boot
  • server ubuntu pas de sortie audio
  • Service pour durcir un server Ubuntu
  • Comment identifier que BIND fonctionne sous chroot
  • Qu'est-ce que les frères et sœurs signifient dans / proc / cpuinfo?
  • mod_rewrite doit servir les files qui existent dans le document racine mais les ignore
  • Comment authentifier des comptes Linux sur un Active Directory et monter un partage Windows lors de la connexion?
  • Existe-t-il une application pour surveiller l'utilisation de la bande passante brisée au niveau de l'application pour Linux (Ubuntu)?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.