J'ai créé un petit script shell qui enregistre toutes ses entrées dans un fichier journal, avec lequel je pensais pouvoir remplacer le binaire sendmail et ainsi obtenir un moyen simple de simuler la livraison d'e-mails sans réellement la mise en place d'un sendmail fonctionnel.Simulation de sendmail avec un script fictif
Cela a échoué, cependant. Pour des raisons que je ne peux pas comprendre. J'ai regardé la source PHP mail.c et autant que je peux comprendre (attention, je ne suis pas très expérimenté en C), PHP s'exécute et parle directement au binaire (défini dans sendmail_path
). Mais aucun fichier journal n'est créé lorsque je remplace le fichier binaire sendmail par mon script et que le script qui remplace sendmail crée toujours un fichier journal lorsqu'il est exécuté, qu'il y ait ou non une entrée.
Le script fonctionne correctement. Ses codes de retour doivent être conformes à ceux de sendmail. A la différence que mon script renvoie toujours 0, quelle que soit l'entrée, puisque je ne suis pas vraiment intéressé à vérifier si l'entrée est valide - juste que j'en obtiens.
Est-il possible d'obtenir ce que je veux, c'est-à-dire d'utiliser un simulateur sendmail?
La source de script est fourni ci-dessous:
#!/bin/bash
LOGDIR=/tmp/sendmail-sim
NOW=$(date +%Y%m%dT%H%M)
CNT=1
FILENAME="$LOGDIR/$NOW.$CNT.log"
while [ -f $FILENAME ]; do
CNT=$(($CNT + 1))
FILENAME="$LOGDIR/$NOW.$CNT.log"
done
echo "$0 $*" > $FILENAME
while read BUF
do
echo $BUF >> $FILENAME
done
exit 0
PS. Mon sendmail actuel (ou en fait, postfix) reçoit des e-mails de PHP, mais je ne veux pas envoyer d'e-mail ou avoir besoin d'aller creuser dans sa file d'attente en développement.
Pour confirmer - votre script sendmail fonctionne lorsqu'il est appelé depuis la ligne de commande, mais pas depuis PHP? Je ne suis pas sur la façon dont fonctionne PHP Runtime mais je me demande s'il essaie de lier dans l'objet binaire mail, plutôt que d'héberger dans l'environnement Unix ?? – JulesLt
Oui, cela fonctionne. Je n'ai pas essayé d'utiliser la commande mail. (Sur un tram maintenant, mais testera bientôt.) –
@Jules: J'ai maintenant testé mon script en utilisant la commande 'mail' et je peux confirmer que cela fonctionne. Maintenant que j'ai révisé le script, il fonctionne même correctement. (La première version, même si elle a fonctionné, ne lit que «stdin» jusqu'à ce qu'une ligne vide, qui a conduit à l'omission de la partie du message.) –