Erwin: sendmail Alternative für Windows gesucht..

Beitrag lesen

Hallo !

Ich suche eine (für Perl) alternative zu sendmail für mein WAMP. Ich habe mir mal das NT:SMTP von Graham Barr angeschaut, aber damit komm ich irgendwie überhaupt nicht klar.

Was nutzt Ihr für den Emailversand unter Perl?

Net::SMTP; # ;-)

Du brauchst einen Postausgangsserver, falls der auf dem localhost nicht läuft, nimm einfach den SMTP Gateway von deinem Provider (oder einen anderen der erreichbar ist und über den du relay'en darfst)

Diesen Server gibst du bei der Objekterstellung an.

Erwin

=beispiel
#!/usr/bin/perl

###########################################################################
###########################################################################

Konfiguration des Scripts

eMail - Adresse Empfaenger, bitte einfache Hochkomma

$to = 'rosti@vr-web.de';

Bestaetigungsseite

$confirm = 'http://home.vr-web.de/~rolfrost/confirm.html';
###########################################################################

Optionale Konfiguration

Postausgangsserver, Hostname eines Rechners mit sendmail, postfix o.ae.

Normalerweise ist das der localhost und muss nicht geaendet werden

$host = 'localhost';

###########################################################################

Ende der Konfiguration

###########################################################################
###########################################################################

use strict;
use vars qw($to $host $confirm);
use subs qw(compute abbruch);
use CGI 'param';
use Net::SMTP;

compute;

exit;
###########################################################################

Funktionen

###########################################################################

SMTP_Mail senden

sub mail{
 # needs 5 or 6 arguments
 my ($smtp_host, $rcpt, $subject, $msg, $abs_email, $abs_name) = @_;
 my $from = ();

if($abs_name){ $from = "$abs_name <$abs_email>" }
 else{ $from = "<$abs_email>"}

# Neues Objekt erstellen
 my $s = new Net::SMTP($smtp_host);

# format the message
 my $message = <<"--MSG";
From: $from
To: <$rcpt>
Subject: $subject

$msg

--MSG

# Ab geht die Post        # dem SMTP Protocol entsprechendes Kommando
 $s->mail($abs_email);  # mail from:roro@local
 $s->to( $rcpt );       # rcpt to:otto@local
 $s->data( $message );  # data: eintippen der message, abschluss mit einem Punkt
 $s->quit();            # quit
 return 1;
}
###########################################################################

Die Abbruchfunktion

sub abbruch{
 print "Content-type: text/html\n\n";
 print qq(
  <h1>$_[0]</h1>
  <p>
  $_[1]
 );
 exit;
}
###########################################################################

Die Hauptfunkion, es werden Pruefungen gemacht:

1. Wurden die richtigen Feldnamen verwendet?

2. Ist der angegebene Postausgangsserver verfuegbar (port 25 offen)?

3. Ist jedes Eingabefeld ausgefuellt?

sub compute{
 # Kontrolle der verwendeten Paramaternamen, diese Namen muss es geben
 my %control = (
  'from', 1,
  'name', 1,
  'subject',1,
  'text',1,
 );
 my @names = param;
 my $names = join "<br>", @names;
 foreach my $name(@names){
  if(not $control{$name}){
   abbruch("Konfigurationsfehler","Falscher oder fehlender Parameter, bitte die Feldnamen from, name, subject und text verwenden, siehe Beschreibung im Script. Verwendet wurden die Feldnamen:<p>$names ");
  }
 }

# Testen des Postausgangsservers auf Port 25
 my $client_sock = new IO::Socket::INET (
  PeerAddr => $host,
  PeerPort => 25,
  Proto    => 'tcp') or abbruch "Konfiguration oder Socketfehler","Der eingetragene Postausgangsserver $host ist an Port 25 nicht offen";
 $client_sock->close();

# Nun die Parameter einlesen
 my $from = param 'from' or abbruch "Fehleingabe","eMail ist erforderlich, Backbutton...";
 my $name = param 'name' or abbruch "Fehleingabe","Name ist erforderlich, Backbutton...";
 my $subject = param 'subject' or abbruch "Fehleingabe","Betreff ist erforderlich, Backbutton...";
 my $text = param 'text' or abbruch "Fehleingabe","Text ist erforderlich, Backbutton...";

# Mail wird nun gesendet
 mail($host,$to,$subject,$text,$from,$name) or abbruch "Fehler","Die Mail wurde nicht gesendet, moeglicherweise steht das Modul Net::SMTP nicht zur Verfuegung oder es wurde ein nicht funktionaler Postausgangsserver eingetragen.";

# Umleitung zu Bestaetigung
 redir($confirm);
}

###########################################################################

entfernt Leerzeichen am Anfang und am Ende eines Strings

Auch Tabulatoren

sub trim{
 my $s = shift;
 $s =~ s/^\s+|\s+$//g;
 return $s;
}

###########################################################################

Redirection

sub redir{
        my $url = shift;
        print "Status: 302 Moved\n";
        print "location: $url\n\n";
}
###########################################################################

--
SELFforum - Das Tor zur Welt!
Theoretiker: Wie kommt das Kupfer in die Leitung?
Praktiker: Wie kommt der Strom in die Leitung?