7 votes

Comment acheminer un courriel vers un script

Ce que j'aimerais faire, c'est mettre en place une adresse comme something@myhost.com qui prendra n'importe quel email qu'elle reçoit et exécutera le message complet en tant que STDIN dans un Shell Shell. Je n'arrive pas à faire fonctionner ce système. J'ai essayé plusieurs solutions, dont celle-ci :

Comment router certains emails vers un script dans Postfix ?

Mais ma configuration est un peu différente. J'ai une configuration Postfix/Dovecot/MySQL, donc tout le courrier électronique est géré par Dovecot, et Postfix lit ses cartes depuis MySQL. Quoi que j'ajoute au fichier master.cf, cela ne semble pas fonctionner. SpamAssassin a une ligne à cet endroit et cela fonctionne bien. Je suis coincé !

EDIT : J'aimerais vraiment que les gens lisent attentivement avant de downvoter ma question. J'utilise MySQL pour mes cartes d'alias, donc /etc/aliases ne fonctionne pas, j'ai déjà essayé cela bien sûr.

4voto

Sandor Marton Points 1494

De toute évidence, la réponse de Douglas Land fonctionnera, avec un petit ajout.
Supposons que vous n'ayez que localhost.localdomain à $mydestination dans main.cf.
Ajoutez ensuite un alias virtuel :

something@myhost.com -> somelocaluser@localhost.localdomain

Dans main.cf vous aurez besoin :

alias_maps=hash:/etc/aliases

Puis ajoutez à /etc/aliases :

somelocaluser: "|/your/script/here"

newaliases+postfix reload et vous êtes prêt à partir.

0 votes

Ça ne marche pas. J'ai configuré un alias virtuel foo@myhost.com pour pointer vers foo@localhost.localdomain et j'ai essayé foo@localhost aussi. Il rebondit sur moi au lieu d'aller vers le script.

0 votes

Aussi, mydestination est vide, et main.cf recommande de le laisser vide sinon cela peut causer des problèmes. Si je fixe mydestination à mon hôte, j'obtiens un avertissement dans le mail.log : warning: do not list domain blahblah.com in BOTH mydestination and virtual_mailbox_domains

0 votes

Eh bien, ajoutez localhost.localdomain à ma destination. N'ajoutez pas le domaine principal.

1voto

David Watson Points 850

Vous pouvez acheminer une entrée vers un script par l'intermédiaire de /etc/aliases , RE :

foo: "|/your/script/here"

modifier /etc/aliases puis exécutez newaliases et recharger le processus postfix.

0 votes

Comme je l'ai dit, j'utilise MySQL et les cartes d'alias, donc /etc/aliases n'est même pas utilisé.

0 votes

Ce lien est mort, existe-t-il un autre similaire ?

0 votes

Voici une copie en cache du contenu : web.archive.org/web/20100417080935/http://jeroensmeets.net/

1voto

Geeth Points 1

J'opterais pour Procmail. Nous l'utilisons pour analyser toutes sortes de courriers à destination des scripts et des bots IRC pour les notifications.

Voici un exemple de la façon de gérer les e-mails. http://linuxgazette.net/issue14/procmail.html

Un court exemple pertinent est donné ici pour plus de facilité :

  1. Créez un utilisateur local appelé handler par exemple.

  2. Ir a handler et créez un fichier appelé .procmailrc contenant :

:0
| $HOME/bin/my.script

Cela transmettra l'intégralité de l'email entrant au script. $HOME/bin/my.script à travers STDIN.

C'est également ici que j'ai obtenu de l'aide avec Procmail lorsque j'ai essayé pour la première fois de transmettre des e-mails à un script : Comment utiliser procmail pour obtenir un message dans une variable

0 votes

Le lien était en ligne avec le texte. J'ai cependant développé ma réponse pour plus de facilité.

0 votes

Ça ne marche pas. Comme je l'ai dit la distribution locale du courrier n'est pas activée sur ce système. Ce serveur est purement piloté par Dovecot+MySQL pour la gestion des boîtes aux lettres et des alias. Les comptes d'utilisateurs locaux ne s'enregistrent pas comme pouvant recevoir du courrier simplement parce qu'ils existent.

0voto

Tim Haegele Points 951

Je vérifierais si sieve supporte le piping vers un script. script supporte sieve script.

Comme alternative, vous pouvez utiliser "procmail" comme MDA entre postfix et Dovecot. Procmail peut pipe vers un Dovecot.

(cela dit je me demande pourquoi la réponse de Douglas Land ne fonctionne pas, mysql comme backend ne devrait pas faire de différence ? !)"

0 votes

Simple. Dans la configuration par défaut de postfix, dans la section /etc/main.cf alias_maps pointe vers hash:/etc/aliases. Dans mon main.cf, cette ligne a disparu, remplacée par virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf . Tous les alias sont gérés par une requête mysql. J'ai essayé d'utiliser pipe dans la base de données aussi, et cela n'a pas fonctionné.

0 votes

Aliase_maps et virtual_maps sont deux choses différentes. Vous devriez lire "man aliases" et "man virtual".

0voto

lepe Points 456

Une chose qui n'a pas été mentionnée est que vous pouvez utiliser plus d'une table de consultation (séparés par une virgule ou un espace) :

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
alias_maps = mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

Le premier (virtual_alias_maps), recherchera un email et retournera un nom d'utilisateur (par exemple : info@example.com -> info1234).

Ensuite, le second (alias_maps) cherchera un nom d'utilisateur dans votre base de données, s'il n'est pas trouvé, il le cherchera dans /etc/aliases. De cette façon, vous pouvez toujours gérer vos alias dans MySQL et définir vos scripts dans /etc/aliases, et pas besoin d'ajouter "@localhost.localdomain" aux utilisateurs locaux.

Pour tester si votre configuration est correcte, utilisez :

postmap -q info@example.com mysql:/etc/postfix/mysql-virtual.cf
postmap -q info1234 mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

Utilisation de comptes locaux avec alias dans MySQL :

Dans l'une de mes configurations personnalisées, j'utilise des comptes locaux pour les utilisateurs et MySQL pour les alias uniquement. C'est donc ainsi que je l'ai configuré :

virtual_alias_maps = hash:/etc/postfix/vusers
smtpd_sender_login_maps = hash:/etc/postfix/vusers
virtual_alias_domains = /etc/postfix/vhosts
alias_maps = mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

Comme vous pouvez le constater, n'hésitez pas à les mélanger comme vous le souhaitez.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X