Formmail für Python

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
MarlKarx
User
Beiträge: 8
Registriert: Donnerstag 13. Februar 2003, 15:08

Hallo zusammen,

ich bin nun schon 1,5 Tage auf der Suche nach einer Formmail.cgi für Python, habe aber nur welche für Perl entdeckt. :cry:
Kann mir jemand einen Link zum Downloaden verraten???
Bitte, Bitte!!!
delta-c
User
Beiträge: 29
Registriert: Montag 9. September 2002, 17:00
Wohnort: Berlin
Kontaktdaten:

MarlKarx
User
Beiträge: 8
Registriert: Donnerstag 13. Februar 2003, 15:08

Danke für die schnelle Antwort, ich werd es gleich mal ausprobieren.

Jan
MarlKarx
User
Beiträge: 8
Registriert: Donnerstag 13. Februar 2003, 15:08

Hallo,

habe das Skript ausprobiert, bekomme jedoch die Fehlermeldung Error 500.

Im Netz habe ich diesen Kommentar dazu gefunden:

"Ein Error 500 (interner Serverfehler) tritt auf falls folgendes nicht gegeben ist:
Fall 1: die 1.te Zeile endet nicht mit einem einfachen Linefeed (LF = \n)
Fall 2: die 1.te Zeile endet mit einem Carriage Return+Linefeed (CRLF = \r\n)",

weiß aber nicht was ich verändern soll, da ich an der ersten Zeile keine Veränderungen vorgenommen habe und diese auch mit funktionierenden Programmen übereinstimmt.

Kann mir da jemand weiterhelfen?
delta-c
User
Beiträge: 29
Registriert: Montag 9. September 2002, 17:00
Wohnort: Berlin
Kontaktdaten:

MarlKarx hat geschrieben: "Ein Error 500 (interner Serverfehler) tritt auf falls folgendes nicht gegeben ist:
Fall 1: die 1.te Zeile endet nicht mit einem einfachen Linefeed (LF = \n)
Fall 2: die 1.te Zeile endet mit einem Carriage Return+Linefeed (CRLF = \r\n)",
Kann mir da jemand weiterhelfen?
Hast Du das Script im Text-Modus des FTP-Programms hochgeladen? Poste mal das ganze Script, das Du ausführen möchtest.
Gruß,
Kai
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Code: Alles auswählen

#!/usr/bin/python
print "Content-type: text/plain\n\n"
print "hallo"
wichtig ist das \n bei Content-type: text/plain\n\n, das regelt den Fehler, den du bekommen hast. Der Client/server wusste dadurch nicht, wie diese HTTP - Antwort formatiert ist ;-)
delta-c
User
Beiträge: 29
Registriert: Montag 9. September 2002, 17:00
Wohnort: Berlin
Kontaktdaten:

Milan hat geschrieben:

Code: Alles auswählen

#!/usr/bin/python
print "Content-type: text/plain\n\n"
print "hallo"
wichtig ist das \n bei Content-type: text/plain\n\n, das regelt den Fehler, den du bekommen hast. Der Client/server wusste dadurch nicht, wie diese HTTP - Antwort formatiert ist ;-)
Argh, mein privates Content-Management-System hat das erste \ eliminiert.... Grrr! Danke für den hinweis,

Kai
MarlKarx
User
Beiträge: 8
Registriert: Donnerstag 13. Februar 2003, 15:08

Hallöchen

ick habe jetzt irgendwie gar keinen Plan mehr, nachdem ich gestern nochmal gesurft bin.


ganz grundlegend mal eine Frage:
Die Zeile: "print "Content-type: text/plain\n\n" " bedeutet doch, daß man HTML-Code in die CGI einbauen und ausgeben kann. Dies bedeutet doch wiederum, daß ich das Kontaktformular direkt in Kai´s Formmailer einbauen sollte (so hab ich es auch gestern probiert).
Auf der anderen Seite, so mein anfänglicher Grundgedanke, habe ich doch aber ein HTML-Kontaktformular und verschicke nur die Daten mit dem Formmailer, oder ???

Irgendwie habe ich jetzt den Überblick verloren und es wäre schön von euch eine Antwort zu bekommen.

Mein Skript stelle ich rein, sobald ich wieder Zugang zu meinem Account habe.
RicmanX
User
Beiträge: 69
Registriert: Donnerstag 29. August 2002, 17:10
Wohnort: Erfurt
Kontaktdaten:

Erstmal muss es Content-type: text/html\n\n für HTML Ausgaben heißen damit der Browser was macht ;)

Da du im form ja etwas abschickst, kannst du halt überprüfen ob was im Dict drin ist, wenn nicht dann gibst du das Formular aus. Oder du machst ein hidden input den du z.b. action nennst. Fragst dann ab was es ist und sendest, zeigst das Formular an etc. ;)
MarlKarx
User
Beiträge: 8
Registriert: Donnerstag 13. Februar 2003, 15:08

Also ich habe meine Gedanken jetzt ein wenig geordnet und mein Webabfrageformular:

<html>
<head>
<title>Web-Formular</title>
</head>
<body>
<h1>Feedback-Formular</h1>
<form name="form_test" method="POST"
action="http://ping/db/jandb/FormMail2.cgi">

Vorname: <input type="text" name="Vorname" size="10" maxlength="20"><br>
Nachname: <input type="text" name="Nachname" size="20" maxlength="20"><br>
E-Mail-Adresse: <input type="text" name="Email"size="30"
maxlength="40"><br><maxlength="4"><br>

Was wollen Sie mir mitteilen?<br> <right> <textarea name="Sonstiges" rows="10" cols="70" wrap="virtual"></textarea><br>
<input type="submit" value="Formular verschicken">
</form>
</body>
</html>


erstellt, dieses schickt die Angaben zum Formmailer, dem ich einfach nur die übergebenen Daten und Adressen zugewiesen habe:

#!/usr/bin/python
import cgi
import smtplib
empfaenger = "psfkafka@gmx.de"
absender = "http://ping/db/jandb/form/formular.html"
betreff = "Anfrage ueber Kontaktformular"
puffer = cgi.FieldStorage ('Vorname','Nachname','Email','Sonstiges')
msg = "To: %s\n" %empfaenger
msg = msg + "From: %s\n" %absender
msg = msg + "Subject: %s\n\n" %betreff
msg = msg + str (puffer)
server = smtplib.SMTP ('xxxxxxx.de')
server.sendmail (absender, empfaenger, msg)
server.close ()
print "Location: http://ping/db/jandb/form/danke.html \n\n"


Dabei bekomme ich folgende Fehlermeldung:

Server error!

Error message:
Premature end of script headers: FormMail.cgi


ich hoffe ich bin damit auf der richtigen Spur und es wäre schön, wenn Ihr mir weiterhelfen könntet.
MarlKarx
User
Beiträge: 8
Registriert: Donnerstag 13. Februar 2003, 15:08

Wenn ich das jetzt richtig verstanden habe, benötige ich das "Content-type: text/html\n\n" und "Content-type: text/plain\n\n" zur Aktivierung des Browsers, damit ich eingebundene, bei html=>tags, bei plain=>print-Anweisungen ausgeben lassen kann. annähernd richtig?
Zuletzt geändert von MarlKarx am Dienstag 18. Februar 2003, 18:12, insgesamt 1-mal geändert.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

nö, falsch verstanden...

Ein Browser ruft eine Internetadresse auf und erwartet natürlich von dieser eine Antwort. (Würdest du ja auch wollen, oder?) Der Server auf dem die angeforderte Seite liegt, sieht, dass für die Antwort etwas verarbeitet werden muss, Beispielsweise ein Formular (was der Browser mit übergeben hat). also ruft der Server ein Programm, dein CGI-Script. Das Script soll eine Antwort formulieren, die zurückgesendet werden soll. Damit der Browser weiß, wie er die Antwort behandeln muss, muss dastehen, ob es eine textdaeit (plain), ein html-script(HTML) oder irgendetwas anders ist. Dein Script macht also nix anderes, als die HTML Seite auszugeben (mit print), die sonst statisch auf dem server als Datei liegen würde. Das Contenttype formatiert die Antwort.

Alles klar?
delta-c
User
Beiträge: 29
Registriert: Montag 9. September 2002, 17:00
Wohnort: Berlin
Kontaktdaten:

Hi!
Zwei Dinge:
MarlKarx hat geschrieben: #!/usr/bin/python
import cgi
import smtplib
empfaenger = "psfkafka@gmx.de"
absender = "http://ping/db/jandb/form/formular.html"
Es kann sein, daß hier der Fehler liegt. Schreib mal als Absender eine E-mail Adresse deiner Domain rein. Wenn der SMTP-Server vernünftig konfiguriert ist, macht er nämlich nur e-mails, die auch wirklich von deiner Domain kommen. Mit einem http:// Adresse als Absender kann kein SMTP-Server was anfangen, wenn ich mich nicht täusche.
MarlKarx hat geschrieben:betreff = "Anfrage ueber Kontaktformular"
puffer = cgi.FieldStorage ('Vorname','Nachname','Email','Sonstiges')
msg = "To: %s\n" %empfaenger
msg = msg + "From: %s\n" %absender
msg = msg + "Subject: %s\n\n" %betreff
msg = msg + str (puffer)
server = smtplib.SMTP ('xxxxxxx.de')
server.sendmail (absender, empfaenger, msg)
server.close ()
print "Location: http://ping/db/jandb/form/danke.html \n\n"
Ersetz vielleicht auch die letzte Zeile mal testweise durch

Code: Alles auswählen

print "Content-Type: text/plain\n\n"
print "Versand hat geklappt!"
Nur um zu schauen, ob es dann funktioniert.

HTH,
Kai
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Bitte nicht erschlage, aber ich war so frei, in den Postings jeweils den smtp server von dem Skript mit xxxxx zu versehen.

Man muss es nicht so offen zur schau tragen, denn diese Spammer sollen ja nicht evtl. unnötig gefüttert werden.

Dient nur zur Sicherheit für den betreiber von der Seite.


Also, nicht böse sein, dass ich in den Beiträgen editiert habe.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
Gast

1) Contenttype: AHA, gerafft, danke!!! :D ,

2) danke auch für die Hinweise, ich hab es gerade geändert, bekomme aber ebenfalls nur die Fehlermeldung:

Server error!

Error message:
Premature end of script headers: FormMail.cgi

error 500

in meiner error.log erhalte ich ebenfalls nur diesen Ausdruck.
Kann mir jemand sagen, durch welche grundsätzlichen Fehler dieser error hervorgerufen wird? Oder ist das die Standartmeldung bei Ungereimtheiten?
MarlKarx
User
Beiträge: 8
Registriert: Donnerstag 13. Februar 2003, 15:08

ups, hatte ganz vergessen mich einzuloggen :oops:
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

mach mal am scriptanfang das:

Code: Alles auswählen

import cgitb;cgitb.enable()
und sag mir mal den fehler... der ist dann nämlich besser verständlich, es wird die Ausnamhe von Python wie normal angezeigt.
MarlKarx
User
Beiträge: 8
Registriert: Donnerstag 13. Februar 2003, 15:08

Hurra, keine Fehlermeldung mehr, :lol:

soweit erstmal danke an alle!!!

habe die Formatierung der Antwort einfach an den Anfang gesetzt und nun ist der Fehler weg.

#!/usr/bin/python
import cgi
import smtplib
print "Content-Type: text/plain\n\n"
empfaenger : ...

bedingt das noch ewas anderes???

Endausgabe und mailsverschicken klappt zwar trotzdem noch nicht, aber mal gucken
Antworten