Domanda

Sto usando sendmail in perl e ho notato (dopo molti colpi di testa contro il muro) che quando lo script viene eseguito dalla riga di comando ha bisogno che tu lasci fuori i \ n (s) dopo la tua e-mail e il destinatario indirizzo e-mail per formattare correttamente la posta, ma quando viene eseguito tramite CGI se quelli \ n non sono presenti, viene restituito un errore che indica che l'e-mail del destinatario non è corretta.

Qualcun altro ha riscontrato questo? Che cosa stanno facendo i due in modo diverso?

È stato utile?

Soluzione

In un paio di commenti menzioni che stai eseguendo lo script dalla riga di comando con l'opzione -l (perl -l foo.cgi).

L'opzione -l consente l'elaborazione automatica della fine della linea e poiché il tuo problema è con le terminazioni di linea, ti suggerisco di provarlo senza -l.

Altri suggerimenti

Scommetto che stai ricevendo dati dai prompt nella riga di comando e non chomp ing in questo modo:

my $send_to = <>;

Ciò significa che $ send_to avrà già un " \ n " ;. Per farli funzionare entrambi allo stesso modo, chomp le variabili:

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

o solo

chomp(my $send_to = <>);

Da dove provengono i dati? Hard coded nello script o da un modulo web?

A parte questo, se ottieni l'indirizzo e-mail del destinatario da un modulo web, il tuo modulo verrà utilizzato dagli spammer. È una garanzia al 100%.

Il termine "CGI" è ampio, se intendi il tuo script perl eseguito come CGI contro il tuo perlscript eseguito dalla riga di comando, guarderei verso il percorso che ha lo script e il suo ambiente ereditato generale. Soprattutto se lo stai eseguendo come userid diversi. Se il server web è in chroot, ecc.

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

Quindi suppongo che tu abbia qualcosa del genere per eseguirlo dalla riga di comando:

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

e questo quando " in esecuzione tramite CGI " ;:

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

Quindi la domanda che vorrei farti è come stai chiamando sendmail con le variabili sopra, e anche cosa intendi quando dici "in esecuzione tramite CGI" rispetto a correre tramite la riga di comando? Stai solo aggiungendo il codice CGI e stai ancora eseguendo tramite la riga di comando o visitando il suo URL in un browser Web?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top