Frage

Ich bin mit Sendmail in Perl und bemerkte (nach vielen Hammer von Kopf gegen die Wand), dass, wenn das Skript auf der Kommandozeile ausgeführt wird es Sie braucht das \ n wegzulassen (n) nach Ihrer E-Mail und der Empfänger e-Mail-Adresse, um die e-Mail korrekt zu formatieren, aber wenn über CGI laufen, wenn diejenigen \ n (n) gibt es nicht einen Fehler zurückgibt die besagt, dass der Empfänger die e-Mail ungültig ist.

Hat jemand anderes dieses begegnet? Was sind die beiden anders zu machen?

War es hilfreich?

Lösung

In ein paar Ihre Kommentare, die Sie erwähnen, dass Sie das Skript von der Kommandozeile mit der Option -l ausführen (perl -l foo.cgi).

Die Option -l ermöglicht die automatische Zeilenende-Verarbeitung, und wie Ihr Problem mit Zeilenenden ist, schlage ich vor, Sie versuchen, es ohne die -l.

Andere Tipps

Ich wette, dass Sie Daten von Eingabeaufforderungen in auf der Kommandozeile bekommen und nicht chomp sie wie folgt ing:

my $send_to = <>;

Das bedeutet send_to $ wird bereits ein "\ n" hat. Um sie zu machen beide die gleiche Art und Weise chomp die Variablen arbeiten:

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

oder

chomp(my $send_to = <>);

Wo kommen die Daten? Hart im Skript codiert, oder von einem Web-Formular?

Wie Nebenbei bemerkt, wenn Sie den Empfänger der E-Mail-Adresse von einem Web-Formular erhalten, das Formular wird von Spammern verwendet werden. Es ist eine 100% ige Garantie.

Der Begriff „CGI“ breit ist, wenn Sie Ihr Perl-Skript als CGI läuft bedeuten im Vergleich zu yur Perlscript Lauf in der Befehlszeile, ich in Richtung der Wegfindung aussehen würde, dass das Skript hat und seine allgemeine geerbte Umgebung. Vor allem, wenn Ihr es als verschiedene Benutzer-IDs ausgeführt wird. Wenn der Web-Server in einer chroot ist, etc.

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

So vermute ich, dass Sie etwas davon haben es über die Kommandozeile ausgeführt werden:

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

und dies, wenn "läuft über CGI":

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

So ist die Frage, die ich Ihnen dann fragen würde, ist, wie Sie sendmail mit den oben genannten Variablen anrufen, und auch, was meinen Sie, wenn Sie sagen, „über CGI läuft“ versus über die Kommandozeile ausgeführt wird? Sind Sie nur CGI-Code hinzufügen und noch über die Kommandozeile ausgeführt wird oder durch die entsprechende URL in einem Web-Browser zu besuchen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top