Sendeformular

Django, Flask, Bottle, WSGI, CGI…
Antworten
arren
User
Beiträge: 10
Registriert: Samstag 21. Mai 2016, 16:28

Hallo!

Mein Ziel ist es, ein Anmeldefenster im Browser zu haben (Matrikelnummer und Passwort), welches beim Login mir eine Email mit Anhang versendet.
Soweit funktioniert es auch ganz prima.
Logge ich mich nun ein, passieren zwei Sachen, die ich so vermeiden will. Zum einen erscheint in der Adresszeile die Matrikelnummer + Passwort. Wie kann ich diese verschwinden lassen.

Vor Login
Bild

Nach Login
Bild


Und zum Anderen erhalte ich nach der Login Seite eine leere Seite, die ich versucht habe mit folgendem Befehl in der login.py (ohne Erfolg) zu ändern:

Code: Alles auswählen

RESPONSE = """Content-type: text/html

<html>
  <head><title> Versandbestaetigung </title></head>
  <body>
   <h2>Hallo! Eine e-mail mit allen relevanten Daten wurde an %(Mnummer)s@web.de versendet!</h2>
  </body>
</html>"""

import cgi
form = cgi.FieldStorage()
fromaddr = form.getvalue("Mnummer")
toaddr = form.getvalue("Mnummer")
passwort = form.getvalue("passwort")
print RESPONSE % vars()

Der Vollständigkeitshalber hier die beiden Datein:
\cgi-bin\login.py
\static\index.html

Code: Alles auswählen

import cgi
form = cgi.FieldStorage()
fromaddr = form.getvalue("Mnummer")
toaddr = form.getvalue("Mnummer")
passwort = form.getvalue("passwort")


import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Kenndatenuebermittlung"

body = "Hallo,\n im Anhang findest du, wie angefodert, eine Uebersicht der Kenndaten"

msg.attach(MIMEText(body, 'plain'))

filename = "Kennlinie.txt"
attachment = open("C:\untitled8\Kennlinie.txt", "rb")

part = MIMEBase('application','octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment; filename= %s" % filename)

msg.attach(part)

server = smtplib.SMTP('smtp.web.de', 587)
server.ehlo()
server.starttls()
server.login(fromaddr+"@web.de",passwort)
text = msg.as_string()
server.sendmail(fromaddr+"@web.de",toaddr+"@web.de", text)
server.close

[codebox=html5 file=index.html]<!DOCTYPE html>
<html>
<body>
<form method="get" action="/cgi-bin/login.py">
Formular zum versand der Kennwerte <br/>
<p>Matrikelnummer: <input type="text" name="Mnummer" maxlength="20" size="15" /></p>
<p>Passwort : <input type="password" name="passwort"/></p>
<p><input type="submit" value="Login" /></p>
</form>
</body>
</html>[/code]
BlackJack

@arren: Wenn die Werte nicht an die URL angehängt werden sollen, dann musst Du "post" als Methode im <form> angeben.

Und das mit dem zurücksenden einer Antwort sollte im Grunde so wie gezeigt funktionieren, allerdings ist das in der kompletten login.py nicht enthalten‽
arren
User
Beiträge: 10
Registriert: Samstag 21. Mai 2016, 16:28

BlackJack hat geschrieben:@arren: Wenn die Werte nicht an die URL angehängt werden sollen, dann musst Du "post" als Methode im <form> angeben.

Und das mit dem zurücksenden einer Antwort sollte im Grunde so wie gezeigt funktionieren, allerdings ist das in der kompletten login.py nicht enthalten‽
Hi BlackJack,

danke für den Hinweis, mit post klappts bestens!

Wenn ich den "Zurücksenden" Teil mit in die login.py packe dann sieht es wie folgt aus, den Fehler den mir Python pycharm ausgibt, hab ich direkt drunter angehangen:

Code: Alles auswählen

RESPONSE = """Content-type: text/html

<html>
 <head><title> Versandbestaetigung </title></head>
 <body>
  <h2>Hallo! Eine e-mail mit allen relevanten Daten wurde an %(Mnummer)s@web.de versendet!</h2>
 </body>
</html>"""

import cgi
form = cgi.FieldStorage()
fromaddr = form.getvalue("Mnummer")
toaddr = form.getvalue("Mnummer")
passwort = form.getvalue("passwort")
print RESPONSE % vars()

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Kenndatenuebermittlung"

body = "Hallo,\n im Anhang findest du, wie angefodert, eine Uebersicht der Kenndaten"

msg.attach(MIMEText(body, 'plain'))

filename = "Kennlinie.txt"
attachment = open("C:\untitled8\Kennlinie.txt", "rb")

part = MIMEBase('application','octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment; filename= %s" % filename)

msg.attach(part)

server = smtplib.SMTP('smtp.web.de', 587)
server.starttls()
server.login(fromaddr+"@web.de",passwort)
text = msg.as_string()
server.sendmail(fromaddr+"@web.de",toaddr+"@web.de", text)
server.close

Code: Alles auswählen

127.0.0.1 - - [26/May/2016 17:22:42] Traceback (most recent call last):
  File "C:\httpd\cgi-bin\login.py", line 15, in <module>
    print RESPONSE % vars()
KeyError: 'Mnummer'
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@arren: Du willst auch auch nicht Mnummer sondern toaddr benutzen:

Code: Alles auswählen

RESPONSE = """Content-type: text/html
 
<html>
<head><title> Versandbestaetigung </title></head>
<body>
 <h2>Hallo! Eine e-mail mit allen relevanten Daten wurde an {toaddr}@web.de versendet!</h2>
</body>
</html>"""
print RESPONSE.format(toaddr=toaddr)
Dein Code ist auch noch sehr chaotisch. Importe sollten alle ganz am Anfang stehen. Ein paar Funktionen, z.B. zum Mail-Versandt, würden auch nicht schaden. close wird nur referenziert aber nicht aufgerufen.
arren
User
Beiträge: 10
Registriert: Samstag 21. Mai 2016, 16:28

Sirius3 hat geschrieben:@arren: Du willst auch auch nicht Mnummer sondern toaddr benutzen:

Code: Alles auswählen

RESPONSE = """Content-type: text/html
 
<html>
<head><title> Versandbestaetigung </title></head>
<body>
 <h2>Hallo! Eine e-mail mit allen relevanten Daten wurde an {toaddr}@web.de versendet!</h2>
</body>
</html>"""
print RESPONSE.format(toaddr=toaddr)
Dein Code ist auch noch sehr chaotisch. Importe sollten alle ganz am Anfang stehen. Ein paar Funktionen, z.B. zum Mail-Versandt, würden auch nicht schaden. close wird nur referenziert aber nicht aufgerufen.

Mit "toaddr" hats sofor geklappt. Vielen dank für den Hinweis!

Würde mich über Hilfe was die Ordnung des Codes angeht freuen. Weiterführende Links z.B.
Den Code hab ich in Kürze der Zeit geschrieben, einiges aus bestehenden Codes entnommen um mein Projekt abzuschließen. Daher fehlt mir das Gefühl für eine saubere Anordnung
Antworten