hotti: SELF CPAN

Tach!

Perl schläft ein, das pfeifen die Spatzen schon von den Dächern. Was haltet Ihr davon, dem etwas entgegenzuwirken?

Also ich hätte da ja ne Idee. Siehe Thema. Sone kleine CPAN-Splittergruppe hier im SELFraum, ein Eckchen nur für Perl. Um da nicht nur Module, auch hübsche kleine Perl-Hacks zu sammeln. Mitmachen darf jeder, vielleicht ne kleine Registration.

Das könnte irgendwann mal dazu führen, dass auch exotische PerlWorker hierherfinden und vielleicht sogar der Randal Schwartz auf uns aufmerksam wird.

Was haltet Ihr davon?

Hotte

--
1;
  1. Hallo,

    Perl schläft ein, das pfeifen die Spatzen schon von den Dächern. Was haltet Ihr davon, dem etwas entgegenzuwirken?

    SELFHTML schläft ein. Was hältst Du davon, dem etwas entgegenzuwirken?

    Also ich hätte da ja ne Idee.

    Hilf mit, dass SELFHTML 9 bald online ist. Danach könntest Du die Idee mit Perl vorantreiben.

    Vorschlagende Grüße

    Vinzenz

    1. hi Vinzenz,

      Hilf mit, dass SELFHTML 9 bald online ist. Danach könntest Du die Idee mit Perl vorantreiben.

      Wo genau klemmts denn da?

      Viele Grüße,
      Horst Hottentott

      1. Hilf mit, dass SELFHTML 9 bald online ist. Danach könntest Du die Idee mit Perl vorantreiben.

        Wo genau klemmts denn da?

        Zum Beispiel an einem Formmailer für Perl hinter dem man wieder stehen kann.
        Könnten wir ja zusammen machen.

        Ideen für Anforderungen, Leistung etc?

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. moin,

          Hilf mit, dass SELFHTML 9 bald online ist. Danach könntest Du die Idee mit Perl vorantreiben.

          Wo genau klemmts denn da?

          Zum Beispiel an einem Formmailer für Perl hinter dem man wieder stehen kann.

          Den würde ich in zwei Varianten vorstellen:
          1. pipe auf sendmail;
          2. mit dem Modul Net::SMTP;

          Könnten wir ja zusammen machen.

          Wäre es was für Dich, das 1. Teil mit sendmail zu überarbeiten? Ich schreibe dann dafür einen Formmailer, der mit Net::SMTP geht und liefere dazu auch ein Script mit dem der Formmailer lokal getestet werden kann (Net::SMTP::Server).

          Eine dritte Variante (hab ich auf meinem Web rolfrost.de) besteht darin, auf den Maildienst zu verzichten und eine eigene Mailbox auf dem Webserver einzurichten. Die Nachrichten werden dabei in einer MySQL-Tabelle gespeichert und von dort mit einem Kommandozeilen-Perl-Script abgeholt ähnlich wie POP3.

          Wg. der Einheitlichkeit: Für das Formular vier Felder machen,
           Absender-email
           Name
           subject
           maessage

          und mit <fieldset> arbeiten, nicht mit Tabelle ;-)

          Ideen für Anforderungen, Leistung etc?

          Ich werde mir die Perl-Kapitel im aktuellen SELFHTML heute mal durchlesen und schauen, was es zu überarbeiten gilt. Auf den ersten Blick ist es sehr viel was da steht, vielleicht sogar zuviel. Die Basics sind:

          • lokaler Webserver für Perl/CGI
          • Hello World mit Perl
          • Parameterübergabe mit GET und POST
          • ParameterParsing mit CGI.pm
          • Datenbankanbindung
            ... mal sehen.

          Bis dann!
          Hottentott

          --
          Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
          1. Den würde ich in zwei Varianten vorstellen:

            1. pipe auf sendmail;
            2. mit dem Modul Net::SMTP;

            Ich bin NUR für die Version mit Net::MTP
            Die Sendmail Pipe ist einfach zu riskant, und gerade in diesem Punkt sollte man den User nicht im Regen stehen lassen.

            Wäre es was für Dich, das 1. Teil mit sendmail zu überarbeiten? Ich schreibe dann dafür einen Formmailer, der mit Net::SMTP geht und liefere dazu auch ein Script mit dem der Formmailer lokal getestet werden kann (Net::SMTP::Server).

            Eine dritte Variante (hab ich auf meinem Web rolfrost.de) besteht darin, auf den Maildienst zu verzichten und eine eigene Mailbox auf dem Webserver einzurichten. Die Nachrichten werden dabei in einer MySQL-Tabelle gespeichert und von dort mit einem Kommandozeilen-Perl-Script abgeholt ähnlich wie POP3.

            Wg. der Einheitlichkeit: Für das Formular vier Felder machen,
            Absender-email
            Name
            subject
            maessage

            und mit <fieldset> arbeiten, nicht mit Tabelle ;-)

            Ideen für Anforderungen, Leistung etc?

            Ich werde mir die Perl-Kapitel im aktuellen SELFHTML heute mal durchlesen und schauen, was es zu überarbeiten gilt. Auf den ersten Blick ist es sehr viel was da steht, vielleicht sogar zuviel. Die Basics sind:

            • lokaler Webserver für Perl/CGI
            • Hello World mit Perl
            • Parameterübergabe mit GET und POST
            • ParameterParsing mit CGI.pm
            • Datenbankanbindung

            Ich sehe den Formmailer als modulares Ding.
            Zu lernzwecken soll jedes Teil erklärt werden.
            Aber das ganze Bundle soll auch installationsbereit einfach heruntergeladen werden können.

            Was mir wichtig wäre.
            Der Formmaile muss als Perl-Modul und als Standalone Anwendung tauegen.
            Das heisst wir schreiben ein Modul und einen Wrapper dazu.

            Der Formmailer sollte komplett durch ein externes File konfiguriert werden können. Hier würde ich ein File im XML Format vorschlagen.

            Alle Felder (Typ, Name, Id, pflicht, erlaubte zeichen, max-Länge) werden im XML Format festgelegt.
            Es sollen mehr als eine Empfängeradresse definiert werden können, in dem Fall wäre eine Selectbox den Empfänger anwählen lassen.
            Dadurch ergibt sich die "Schwierigkeit" eines kleinen Parsers.

            Es soll möglichst kein MySQL vorausgesetzt werden.
            (Stichwort technik-Abhängigkeit)

            Weitere Leistungen des Formmailers:

            HTML Output, Semantik, verzicht auf Tabellen
            Die Gruppierung von Felder wird im XML Konfigfile deklariert.
            Im restlichen markup möglichst mit Definitionslisten

            Lediglich ein Art Default CSS-File zur Initialisierung wird geboten
            Browsertest

            Spamschutz:
            Cookies zum Absenden erforderlich
            Option: Der Formmailer kann pro Absenderadresse nur einmal innerhalb einer Zeitfrist absenden.
            Pro Cookie kann nur einmal in einer Frist gepostet werden
            Validierung des HTTP Requests (Accept Header muss vorhanden sein)
            Spamschutz wird im Konfigfile festgelegt

            Speicherung von Cookies:
            use Storable ist der direkteste Weg für alle Arten temporäre Daten

            Mein Vorschlag.
            Du kannst ja mal das Net::SMTP Teil übernehmen.
            Alexander Brock kann hier sicher seinen Senf dazugeben, da er das Sendmail Problem gut kennt.

            Vorsicht: Charset UTF8 wenn Minimalanforderung Perl 5.6

            Wer mit mir zum Projekt kommunizieren will: Mailadresse im Head.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
            1. moin,

              Mein Vorschlag.
              Du kannst ja mal das Net::SMTP Teil übernehmen.

              Gerne! Da werde ich eine Funktion schreiben, die folgende Module voraussetzt:
              Net::SMTP;   # zum Versand
              CGI;         # zmu Parsen der Parameter
              IO::Socket;  # zum Testen, ob ein Mailerdeamon auf Port 25 verfügbar ist

              Alldi Module hatten bisher alle Provider, die ich so kenne.

              Was soll denn noch alles so dran sein, utf-8?

              Hotte

              1. Mein Vorschlag.
                Du kannst ja mal das Net::SMTP Teil übernehmen.

                Gerne! Da werde ich eine Funktion schreiben, die folgende Module voraussetzt:
                Net::SMTP;   # zum Versand
                CGI;         # zmu Parsen der Parameter
                IO::Socket;  # zum Testen, ob ein Mailerdeamon auf Port 25 verfügbar ist

                Alldi Module hatten bisher alle Provider, die ich so kenne.

                Was soll denn noch alles so dran sein, utf-8?

                Wir dürfen nicht einfach ein charset voraussetzen.
                Das Betrifft vor allem usereingaben und Inhalte im XML config file.
                Bei perl 5.8 ist utf8 nahtlos integriert. bei perl 5.6 noch nicht.

                Mein erster gedanke.
                Wie sollte ein user SelfFormmail verwenden

                a) er schreibt ein Standalone Script, und verwendet das Modul
                b) er verwendet das Modul innerhalb eines grösseren verzweigteren Scripts.

                ##################################
                Skizze wrapperscript für standalone Version
                man sieht auch, wie die Modulmethoden als Teil
                eines umfassenderen Scripts verwendet werden könnten.

                #!perl -w

                use strict;
                use SelfFormmail;
                use CGI;

                Im Programmverlauf wird nun getestet, ob

                über CGI Daten für Mailbehandlung vorliegen

                my $html_mailoutput;

                if( exists( $query->param('mailform') )
                  or $someotherpar eq 'mailform'
                  ){
                  $html_mailoutput = some_mailhandlingsub();
                }

                #... A wie EVA...
                print $html_mailoutput;

                sub some_mailhandlingsub {
                  my $mail=SelfFormmail->new();
                  if( $mail->has_input() ){
                    if( $mail->spamtest() ){
                      return $mail->nospammessage();
                    }
                    elsif( $mail->invaliddata() ){
                      return $mail->updateform();
                    }
                    else{
                      $mail->send or
                          return $mail->fatalerror;
                        # $mail->send('smtp'); default ?
                        # $mail->send('sendmail');
                      # $mail->testfileprint;
                      # Gib eine Kontrollausgabe aus.
                      return  $mail->output_archive();
                    }
                  }
                  else{ return $mail->newform() }
                }

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

                Die API soll für den Anwender im Programm so geradlinig wie möglich sein.
                Die API soll aber auch einige Testmethoden zulassen.

                $mail->testfileprint;

                Mail in ein File umleiten statt ausgeben (debugging)

                $mail->resetspamlist;

                selbstredend, gerade bei tests.

                mfg Beat

                --

                ><o(((°>           ><o(((°>
                   <°)))o><                     ><o(((°>o
                Der Valigator leibt diese Fische
                1. hi,

                  Wie sollte ein user SelfFormmail verwenden [..]

                  Das wäre wohl eher was für die Downloadseiten. Ich dachte vielmehr an ein ganz einfaches Formmailerscript mit Net::FTP, was erstens natürlich funktionsfähig ist und zweitens so einfach ist, dass es auch von dem Leserkreis verstanden wird, der SELFHTML studiert.

                  Hotte

                  1. hi,

                    Wie sollte ein user SelfFormmail verwenden [..]

                    Das wäre wohl eher was für die Downloadseiten. Ich dachte vielmehr an ein ganz einfaches Formmailerscript mit Net::FTP, was erstens natürlich funktionsfähig ist und zweitens so einfach ist, dass es auch von dem Leserkreis verstanden wird, der SELFHTML studiert.

                    Ich bin der meinung, dass ein Formmailer nicht dazu gedacht ist, als Zwischenprüfung für einen Anfänger in Perl zu funktionieren.
                    Ein Formmailer soll gerade den Bedürfnissen gerecht werden. Das heisst, man soll ihn als Modul verwenden können. Er soll im Output leicht in andere Datenverarbeitung zu integrieren sein.
                    Natürlich ist die Objektorientierte Methode nicht gerade die 1.Stufe. Aber das halte ich für ein didaktisches Problem.

                    Ich möchte etwas machen, das eine definierte Leistung hat, flexibel ist, zuverlässig läuft und innerhalb all dessen einfach nur gut ist.

                    Wenn wir wieder nur einen Beispiel-Formmailer präsentieren, mit ein paar Fixes gegenüber der alten Version, dann ändert sich nichts und es werden Frommailer im netz betrieben mit was weiss ich für Unsicherheiten und Inkompatibilitäten.

                    Jede Schule hat verschiedene Klassen. Erachte es halt einfach mal als eine etwas fortgeschrittenere Klasse. Wäre ja gut, wenn wir dabei selber noch etwas lernen dürfen.

                    Streng genommen kann man die Aufgabe auch wie folgt aufteilen:

                    A) Ein Modul, das sich ausschliesslich dem CGI, dem Formular und der lokalen Datenverwaltung, Validierung annimmt.
                    B) Ein Modul, das ausschliesslich einen definierten Array entgegennimmt, und auf irgend eine Weise versucht, daa Mail zu versenden und eine Erfolgs/Errormeldung zurückgibt.

                    Alles was der Mailversand-Autor dem CGI-Form-Autor mitteilen muss, ist die API um sein Modul anzusprechen.

                    Durch eine solche strenge Zweiteilung kann auch die Anwendung flexibler sein. jemand kann das Mailversand-Modul verwenden, ohne das Formular-CGI Modul verwenden zu müssen, oder umgekehrt.

                    mfg Beat

                    --
                    ><o(((°>           ><o(((°>
                       <°)))o><                     ><o(((°>o
                    Der Valigator leibt diese Fische
                    1. hi,

                      Ich bin der meinung, dass ein Formmailer nicht dazu gedacht ist, als Zwischenprüfung für einen Anfänger in Perl zu funktionieren.
                      Ein Formmailer soll gerade den Bedürfnissen gerecht werden. Das heisst, man soll ihn als Modul verwenden können. Er soll im Output leicht in andere Datenverarbeitung zu integrieren sein.

                      Wie ich schon schrieb: SELF CPAN. Da passt das hin. Als Ergänzung zu SELFHTML, als Rettungsboot für Perl, als Tribut an eine Community die am Wegträumen ist.

                      Schöne Grüße,
                      Horst Haselhuhn

                      1. Wie ich schon schrieb: SELF CPAN. Da passt das hin. Als Ergänzung zu SELFHTML, als Rettungsboot für Perl, als Tribut an eine Community die am Wegträumen ist.

                        Das Formular-Frontend-Modul ist in den nächsten Tagen fertig.
                        Die API braucht noch etwas Feinschliff und die innere Logik des Moduls muss ich konsequent durchtesten.

                        Das Modul bietet Standardfelder
                        fullname, lastname, prename,
                        contact, email, phone, mobile, address, plz, location, country,
                        tags, subject, text, priority,
                        submit preview

                        Der Aufbau wird mit Gruppen festgelegt.
                        Aber auch eigene Felder können definiert werden.

                        Die API sieht so aus:

                        1.

                        use SelfFormmail;

                        2.

                        my $mail = new SelfFormmail;

                        3.

                        $mail->set_config( HASHREF );

                        4.

                        $mail->set_fields( HASHREF );

                        5.

                        $mail->set_groups( HASHREF );

                        6.

                        my ($status, $text) = $mail->process();

                        oder auch so:

                        1.

                        use SelfFormmail;

                        2.

                        my $mail = new SelfFormmail;

                        3.  Methoden Name ist suboptimal

                        $mail->set_config_by_file( $pathtofile );

                        4.

                        my ($status, $text) = $mail->process();

                        Ich möchte SelfSendmail als Modul einbinden, wobei das Modul unabhängig vom Formmail-Frontend verwendet werden kann.

                        Wäre schön, wenn es Eingang in das Selfhtml Angebot fände.

                        mfg Beat

                        --
                        ><o(((°>           ><o(((°>
                           <°)))o><                     ><o(((°>o
                        Der Valigator leibt diese Fische
                        1. Ich versuche gerade SMTP Zugang in den Formmailer zu integrieren

                          	#	ANS EINGEMACHTE.  
                          	use Net::SMTP;  
                          	my $smtp = Net::SMTP->new(  
                          		Host => $self->{config}{smtp_host},  
                          		Hello => $self->{config}{mail_from},  
                          		Timeout => 5,  
                          		Debug =>1,  
                          		);  
                          	$smtp->mail( $self->{config}{mail_from} );  
                          	$smtp->to( $self->{config}{mail_to} );  
                          	$smtp->data();  
                          	$smtp->datasend( $mailheader );  
                          	$smtp->datasend("\n");  
                          	$smtp->datasend( $mailbody );  
                          	$smtp->dataend();	  
                          	$smtp->quit;  
                          
                          

                          Der smtp Server ist ein ferner Server (smtp.elcappuccino.ch)
                          Ich versuche es ohne passwort, und erwarte ein Scheitern
                          Der Test mit gültigen Daten gibt folgende Debuggin Info aus:

                          Net::SMTP>>> Net::SMTP(2.29)
                          Net::SMTP>>>   Net::Cmd(2.26)
                          Net::SMTP>>>     Exporter(5.58)
                          Net::SMTP>>>   IO::Socket::INET(1.28)
                          Net::SMTP>>>     IO::Socket(1.28)
                          Net::SMTP>>>       IO::Handle(1.24)
                          Net::SMTP=GLOB(0x1bcd000)<<< 220 VTX Services SA Mail System
                          Net::SMTP=GLOB(0x1bcd000)>>> EHLO owner@elcappuccino.ch
                          Net::SMTP=GLOB(0x1bcd000)<<< 250-smtp-01.vtx.ch
                          Net::SMTP=GLOB(0x1bcd000)<<< 250-PIPELINING
                          Net::SMTP=GLOB(0x1bcd000)<<< 250-SIZE 20240000
                          Net::SMTP=GLOB(0x1bcd000)<<< 250-ETRN
                          Net::SMTP=GLOB(0x1bcd000)<<< 250-AUTH LOGIN PLAIN
                          Net::SMTP=GLOB(0x1bcd000)<<< 250-AUTH=LOGIN PLAIN
                          Net::SMTP=GLOB(0x1bcd000)<<< 250-ENHANCEDSTATUSCODES
                          Net::SMTP=GLOB(0x1bcd000)<<< 250-8BITMIME
                          Net::SMTP=GLOB(0x1bcd000)<<< 250 DSN
                          Net::SMTP=GLOB(0x1bcd000)>>> MAIL FROM:owner@elcappuccino.ch
                          Net::SMTP=GLOB(0x1bcd000)<<< 250 2.1.0 Ok
                          Net::SMTP=GLOB(0x1bcd000)>>> RCPT TO:recipient@elcappuccino.ch
                          Net::SMTP=GLOB(0x1bcd000)<<< 554 5.7.1 recipient@elcappuccino.ch: Recipient address rejected: Access denied
                          Net::SMTP=GLOB(0x1bcd000)>>> DATA
                          Net::SMTP=GLOB(0x1bcd000)<<< 554 5.5.1 Error: no valid recipients
                          Net::SMTP=GLOB(0x1bcd000)>>> To: recipient@elcappuccino.ch
                          Net::SMTP=GLOB(0x1bcd000)>>> From: owner@elcappuccino.ch
                          Net::SMTP=GLOB(0x1bcd000)>>> Reply-To: xcv@asdf.ch
                          Net::SMTP=GLOB(0x1bcd000)>>> Content-Type: text/plain; charset=utf-8
                          Net::SMTP=GLOB(0x1bcd000)>>> Subject: sda
                          Net::SMTP=GLOB(0x1bcd000)>>> X-Priority: 3
                          Net::SMTP=GLOB(0x1bcd000)>>> X-Tags:
                          Net::SMTP=GLOB(0x1bcd000)>>> User-Agent: SelfFormmailer
                          Net::SMTP=GLOB(0x1bcd000)>>>
                          Net::SMTP=GLOB(0x1bcd000)>>> Nachricht von SelfFormmailer
                          .....snipp......
                          Net::SMTP=GLOB(0x1bcd000)>>> ------------------------------
                          Net::SMTP=GLOB(0x1bcd000)>>> .
                          Net::SMTP=GLOB(0x1bcd000)<<< 221 2.7.0 Error: I can break rules, too. Goodbye.
                          Net::SMTP=GLOB(0x1bcd000)>>> QUIT
                          [Sat Sep  5 13:22:44 2009] sfm_wrapper.pl: Net::SMTP: Unexpected EOF on command channel at SelfFormmail.pm line 527

                          Frage.
                          wo und wann muss ich
                             auth ( USERNAME, PASSWORD )
                          einsetzen?
                          Wie kann ich über eine smtp Nachfrage (nicht Debugging) herausfinden, dass ich es einsetzen muss?

                          mfg Beat
                          heute ohne Fische