Matti Maekitalo: Formmailer komplett? Zugrifsrechte mit browser setzen...

Beitrag lesen

use Mosche;

Das hört sich zuwar super an, aber ehrlich gesagt hab ich keine ahnung was du meinst, entweder steh ch total auf dem schlauch, oder mir ist das ganze zu hoch...
kannst du mir mal schreiben wie du es am besten machen würdest?

Bitte zitiere das nächste Mal die Stellen, die du nicht verstanden hast, dann ist es einfacher, dir zu antworten.

$mailto = $query->param('mailto');

Nein! Prüfe, ob die entsprechende Ziel-Adresse eine von dir _explizit_ erlaubte Adresse ist, sonst öffnest du SPAM-Versendern Tür und Tor.

Wenn du im Script ungeprüft einen Parameter übernimmst, und den an Sendmail übergibst, kann jeder Spam-Versender dein Script benutzen, um seine Spam-Mails überall hin zu schicken. Das ist schlecht, denn das ist ungern gesehen und macht dich zwar nicht unbedingt strafbar, auf jeden Fall aber erstmal verdächtig (weil die Spam-Emails von deinem Server kommen).

Mach einen Array und trage dort die erlaubten E-mail Adressen ein:

my @all_mails = ('my_mail@blah.de', 'my_mail2@blub.de');

Dann überprüfst du nur noch, ob die per Parameter angegebene E-mail Adresse als Ziel-Adresse erlaubt ist:

if (grep { $mailto eq $_ } @all_mailq) {
   # erlaubte E-mail Adresse, jetzt Mail versenden
   # open sendmail ...
} else {
   # Ziel nicht erlaubt, potentieller Spam-Versender
   print "<h1>Spam ist aber nicht nett!</h1>";
}

open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";

Prüfe, ob du nicht Net::SMTP verwenden willst.

Wenn du ein installiertes Sendmail voraussetzt, bindest du dich an gewisse Server. Besser ist es, direkt mit Net::SMTP deine E-mails zu versenden, dann benötigst du kein Sendmail. Siehe dazu die Doku von Net::SMTP:
perldoc Net::SMTP

use Net::SMTP;

hier solltest du bei einem lokalen Mailserver auch

localhost eintragen können

$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;

use Tschoe qw(Matti);

--
$a=n(1001010);print chr($a+=$_)for(0,43,-2,1,-84,65,13,1,5,
-12,-3,13,-82,48,21,13,-6,-76,72,-7,2,8,-6,13,-104);sub n{
$b=0;$_=0;for($c=length$_[0];$c;--$c){$_+=_($b)if substr$_
[0],$c-1,1;$b++;}$_}sub _{($d)=@_;for($e=1;$d--;$e*=2){}$e}