Question

J'utilise sendmail en Perl et j'ai remarqué (après avoir beaucoup tapé la tête contre un mur) que lorsque le script est exécuté sur la ligne de commande, vous devez omettre le \ n (s) après votre e-mail et celui du destinataire. adresse e-mail afin de formater correctement l'e-mail, mais lors de l'exécution via CGI si ces \ n (s) ne sont pas là, il renvoie une erreur indiquant que l'adresse e-mail du destinataire est mal formée.

Quelqu'un d'autre a-t-il rencontré ce problème? Que font les deux différemment?

Était-ce utile?

La solution

Dans quelques-uns de vos commentaires, vous indiquez que vous exécutez le script à partir de la ligne de commande avec l'option -l (perl -l foo.cgi).

L'option -l active le traitement de fin de ligne automatique, et comme votre problème concerne les fins de ligne, je vous suggère de l'essayer sans le -l.

Autres conseils

Je parie que vous obtenez des données d'invites sur la ligne de commande et non pas chomp les comme ça:

my $send_to = <>;

Cela signifie que $ send_to aura déjà un "\ n". Pour que les deux fonctionnent de la même façon, écrivez les variables:

my $send_to = <>;
chomp($send_to);

ou juste

chomp(my $send_to = <>);

D'où proviennent les données? Codé en dur dans le script ou à partir d’un formulaire Web?

Soit dit en passant, si vous obtenez l'adresse e-mail du destinataire à partir d'un formulaire Web, votre formulaire sera utilisé par les spammeurs. C'est une garantie à 100%.

Le terme "CGI" Est large, si vous voulez dire que votre script Perl est exécuté en tant que CGI, alors que votre script Perlscript est exécuté en ligne de commande, je me tourne vers le chemin d'accès au script et à son environnement hérité général. Surtout si vous l'exécutez en tant qu'utilisateur différent. Si le serveur Web est dans un chroot, etc.

use Data::Dumper;
warn(Dumper(\%ENV));

Je suppose donc que vous avez quelque chose comme ceci pour l'exécuter via la ligne de commande:

my $your_email = "you@foo.bar";
my $recipient_email = "them@foo.bar";

et cela lors de "l'exécution via CGI":

my $your_email = "you@foo.bar\n";
my $recipient_email = "them@foo.bar\n";

La question que je vous pose alors est de savoir comment vous appelez sendmail avec les variables ci-dessus, mais également ce que vous entendez par "exécution via CGI". versus courir via la ligne de commande? Ajoutez-vous simplement du code CGI et utilisez-vous toujours via la ligne de commande ou en visitant son URL dans un navigateur Web?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top