SELF CPAN
hotti
- perl
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
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
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
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
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:
Bis dann!
Hottentott
Den würde ich in zwei Varianten vorstellen:
- pipe auf sendmail;
- 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
maessageund 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
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
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 istAlldi 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;
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.
mfg Beat
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
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
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
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:
use SelfFormmail;
my $mail = new SelfFormmail;
$mail->set_config( HASHREF );
$mail->set_fields( HASHREF );
$mail->set_groups( HASHREF );
my ($status, $text) = $mail->process();
oder auch so:
use SelfFormmail;
my $mail = new SelfFormmail;
$mail->set_config_by_file( $pathtofile );
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
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