Je gère un serveur de messagerie Postfix / Dovecot pour un usage personnel. Il n'y a qu'une poignée de boîtes aux lettres réelles, essentiellement juste [email protected]
et [email protected]
.
J'utilise fréquemment le virtual
fichier pour créer des boîtes aux lettres virtuelles transmises à [email protected]
. J'en ai un certain nombre pour les comptes jetables comme les achats uniques dans les magasins en ligne, les jeux en ligne que je veux essayer sans me soucier du spam en cours, etc. Pour ce faire, je SSH et exécute les commandes suivantes:
sudo vim /etc/postfix/virtual
# add a line that looks like:
# # [email protected] [email protected]
sudo postmap virtual
sudo service postfix restart
Je le fais avec une fréquence suffisante pour que j'automatise le processus dans une certaine mesure. J'ai envisagé d'écrire simplement un script shell qui prenait la boîte aux lettres virtuelle et la vraie boîte aux lettres comme arguments et apportait les modifications lui-même, mais j'espère quelque chose de plus encore.
Je voudrais pouvoir envoyer un e-mail depuis [email protected]
à une autre boîte aux lettres sur le serveur avec le nom de la boîte aux lettres virtuelle comme corps du message. Le problème serait les sudo
appels mais je peux créer un nouvel utilisateur dont la seule responsabilité est de gérer ce qui devrait gérer cela.
La question est principalement la suivante: comment créer un événement déclenché par un e-mail? Y a-t-il un service quelque part qui fait cela? Puis-je configurer Postfix ou Dovecot pour écouter cet e-mail et exécuter des commandes sur cet événement?
Réponses:
La procédure correcte pour exécuter un script (j'utilise un script shell) à la réception d'un message électronique est la suivante. Cela implique de modifier le fichier de configuration de postfix , master.cf (qui, dans mon Debian, se trouve dans / etc / postfix ) en ajoutant la ligne suivante:
qui demande à postfix d'exécuter le script (vous devez le rendre exécutable) lorsqu'un événement se produit.
Pour spécifier quand exécuter le script, procédez comme suit: supposez que vous voulez qu'il soit exécuté lorsque [email protected] reçoit un message. Placez la ligne suivante
à l'intérieur du fichier /etc/postfix/address.txt ; vous devrez créer une base de données appropriée pour postfix pour utiliser ce fichier, ce que vous accomplissez au moyen de
qui produit en sortie un fichier appelé /etc/postfix/address.db . Revenez maintenant au fichier /etc/postfix/main.cf et ajoutez la ligne suivante:
Maintenant, redémarrez postfix ,
et vous devriez être prêt à partir.
la source
sendmail
direct sur le serveur ne déclenchera pas cela.pickup
option.Je peux voir deux solutions évidentes.
Si vous utilisez procmail comme MDA sur votre serveur, ou si vous êtes prêt à le convertir, vous pouvez exécuter n'importe quel script arbitraire sur n'importe quel courrier électronique arbitraire via l'
|
action de recette de procmail (pipe). Espérons qu'il ne sera pas démarré en tant que root, mais il devrait être facile de créer un script qui exécute la magie requise et qui peut être invoqué sans mot de passe en tant que root par un utilisateur pertinent. La sortie du script pourrait même être réinjectée dans le même e-mail et l'e-mail remis ultérieurement en faisant de la recette une action de filtrage.Une alternative (qui devrait nécessiter moins de maintenance pratique) consiste à créer une seule boîte aux lettres et à configurer Postfix
$recipient_delimiter
pour qu'il ne soit pas normalement utilisé à cette fin; par exemple,.
ou-
. Notez que recipient_delimeter est un paramètre à l'échelle du serveur. Disons que vous avez configuré la boîte aux lettres[email protected]
et défini$recipient_delimeter = .
. Cela permettra alorsdummy.<anything>@example.com
qui sera livré à la boîte aux lettres locale correspondant à[email protected]
. Pour désactiver l'un d'eux, ajoutezdummy.<whatever>@example.com
à une table de destinataires appropriée avec une action de rejet. L'inconvénient est qu'il s'agira d'une boîte aux lettres fourre-tout pour le préfixe, vous voudrez donc rendre le préfixe difficile à trouver par accident ou par des attaques de dictionnaire. L'avantage est que dans le cas normal (l'expéditeur respecte vos souhaits et ne revend pas votre adresse e-mail), cette approche ne nécessite aucune maintenance, et vous pouvez toujours modifier votre préfixe plus tard et répertorier explicitement les combinaisons que vous souhaitez conserver lors de la réception de courrier pour .la source
Si le lien tombe en panne, voici un résumé.
Tout d'abord, accédez à
master.cf
et enregistrez votre script "myhook" en ajoutant la ligne suivante:myhook unix - n n - - pipe flags=F user=www-data argv=/path/to/script.sh ${sender} ${size} ${recipient}
Modifiez également la ligne smtp pour indiquer à Postfix d'exécuter le filtre pour tout courrier arrivant via la remise SMTP:
smtp inet n - - - - smtpd -o content_filter=myhook:dummy
Veuillez noter que si vous envoyez des e-mails à l'aide de la commande "sendmail", le filtre ne se déclenchera pas. Dans ce cas, ajoutez l'option après la méthode de livraison "enlèvement":
pickup fifo n - - 60 1 pickup -o content_filter=myhook:dummy
Redémarrez le suffixe:
postfix reload
Rendez votre script lisible et exécutable par n'importe qui:
chmod +rx script.sh
Notez que le script est toujours déclenché pour tout courrier arrivant. Pour spécifier l'adresse exacte, voir la réponse @MariusMatutiae.
la source