2011-01-17 4 views
0

Wie kann ich eine HTML-E-Mail mit der Linux-Befehlszeile in einem Perl-CGI-Skript senden. Ich habe versucht:Hilfe Senden von E-Mails usings der Linux-Mail-Befehl in einem Perl-CGI-Skript

system(echo $message | mail -s $subject $email); 
+1

Abhängig von der Anwendung, System, Umwelt, etc, können Sie wollen die verschiedenen Module im E-Mail :: und Mail :: Namespace als eine alternative Möglichkeit zum Senden von E-Mails von Webservern zu betrachten. – plusplus

Antwort

3

Perl Shell nicht. Was Sie hier tun, ruft eine Perl-Subroutine mit dem "bare word" echo und übergibt den Wert $message binär oder -ed mit der Ausgabe von einigen Sub namens mail, die die Größe der Datei mit Namen $subject (-s Betreiber) übergeben wird - und wir können nur so weit kommen, nachdem wir völlig ignoriert haben, dass es nicht einmal kompiliert werden würde, weil es keinen Operator zwischen $email und dem Ausdruck davor gibt.

In Perl benötigen Sie Anführungszeichen für Ihre Systembefehle. Aber weil $message beliebige Anzahl von Zeichen haben könnte, dass es schwer machen würde passieren zu einer Schale, wie sie ist, dann ist es am besten, ein Rohr zu öffnen und drucken, um es:

use English qw<$OS_ERROR>; 

open(my $mailh, '|-', "mail -s '$subject' $email") 
    or die("Could not open pipe! $OS_ERROR") 
    ; 
print $mailh $message; 
close $mailh; 
0

Werfen Sie einen Blick auf Net::SMTP.

Aus der Dokumentation:

Dieses Modul implementiert eine Client-Schnittstelle an den SMTP-und ESMTP-Protokoll, eine perl5 Anwendung ermöglicht SMTP-Servern zu kommunizieren.

...

Dieses Beispiel sendet eine kleine Nachricht an den Postmaster an den SMTP-Server als Mailhost bekannt:

#!/usr/local/bin/perl -w 

use Net::SMTP; 

$smtp = Net::SMTP->new('mailhost'); 

$smtp->mail($ENV{USER}); 
$smtp->to('postmaster'); 

$smtp->data(); 
$smtp->datasend("To: postmaster\n"); 
$smtp->datasend("\n"); 
$smtp->datasend("A simple test message\n"); 
$smtp->dataend(); 

$smtp->quit;