Hi Leute,
ich bräuchte mal euren Rat. Ich habe mir ein kleines Python Skript gebaut welches Information aus einer Datenbank holt und mir diese dann per Mail zustellt. Das funktioniert soweit auch ganz gut. Da ich aber auch anderen erlauben wollte dies zu nutzen habe ich mit cgi ein Formular gebaut, welches anhand der übergebenen Parameter mein Skript aufruft. Leider kriege ich immer Probleme beim versenden der Mail (nutze im Skript mutt, aufgerufen als Systembefehl). Liegt soweit ich herausgefunden habe an den Rechten, daher meine Frage nach einem Wrapper-skript, wleches mir die Möglichkeit eröffnet das Skript als anderer Benutzer auszuführen.
Oder habt Ihr eine bessere Idee?
PYTHON CGI WRAPPER
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Vielleicht würde uns der Quellcode und die Fehlermeldung weiterhelfen ...
Ansonsten könntest Du es mal mit Gerolds SimpleMail-Script versuchen.
Ansonsten könntest Du es mal mit Gerolds SimpleMail-Script versuchen.
Wenn Du Python >= 2.6 verwendest, kannst Du PEP 370 "Per user site-packages directory" verwenden. Unter Un*x würdest Du z. B. simplemail in
ablegen.
Code: Alles auswählen
~/.local/lib/python2.6/site-packages
https://www.xing.com/go/invite/18513630.6a91d4
habe jetzt mein Programm umgeschrieben und es funktioniert soweit auch.
Lasse mir mit simplemail die Datei (csv) zusenden, jedoch sind die Daten nicht korrekt. Schaue ich mir die Datei auf der Konsole an muss ich feststellen das Zeilen fehlen. Nutze ich z.B. mutt ist alles korrekt.
hat einer vielleicht eine Idee dazu:
Hier ist meine Funktion zum versenden:
Die Datei liegt im /tmp Verzeichnis. Ich bin sehr irritiert und habe grade keien Idee was schieflaufen kann.
Lasse mir mit simplemail die Datei (csv) zusenden, jedoch sind die Daten nicht korrekt. Schaue ich mir die Datei auf der Konsole an muss ich feststellen das Zeilen fehlen. Nutze ich z.B. mutt ist alles korrekt.
hat einer vielleicht eine Idee dazu:
Hier ist meine Funktion zum versenden:
Code: Alles auswählen
def send_CSV(text, csvFile, recipient):
email = Email()
# Absender
email.from_address = "root@webserver.de"
email.from_caption = "webserver"
# Empfaenger
email.recipients.add(recipient, recipient[len(recipient)-15])
# Betreff
email.subject = "Inventar"
# Nachricht
email.message = text
# Anhaenge
email.attachments.add_filename(csvFile)
# Senden
if email.send():
print "Nachricht gesendet."
else:
print "Die Nachricht wurde nicht versendet."
print csvFile
Hi,
erstmal danke für deine Hilfe.
Leider kann ich die CSV nicht verschicken, da sie sensible Daten enthält, die im Unternehmen bleiben sollten.
Hier sind jedoch erstmal die Funktionen zur Generierung der CSV:
Die Version von simplemail.py erscheint mir auch ziemlich alt zu sein, Created: 2004-10-06 Gerold - http://gerold.bcom.at/.
Vielleicht liegt es daran?
Stehe leider ein bissel auf dem Schlauch wie ich die verschickte E-Mail in roher Form bereitstelle.
erstmal danke für deine Hilfe.
Leider kann ich die CSV nicht verschicken, da sie sensible Daten enthält, die im Unternehmen bleiben sollten.
Hier sind jedoch erstmal die Funktionen zur Generierung der CSV:
Code: Alles auswählen
#
def start_CSV(str_name):
#
""" Funktion start_CSV: definiert globale Variablen und gibt csv-File-Handler """
global csvFile
csvFile = "/tmp/%s.csv" %str_name
global writer # definiert die Variable global, fuer die Verwendung in Fkt.write_CSV
try:
writer = csv.writer(open(csvFile, "wb"), delimiter=";")
except csv.Error, e:
sys.exit('file %s: %s' % (csvFile, e))
#
def write_CSV(results, location):
rowresults=[]
for i in results:
p = re.compile('[0-9]{9,}')
m = p.match(i)
if m:
# schreibt die CI-Nummer
rowresults.append(i)
# print ('match found: ', m.group())
else:
rowresults.append(i)
rowresults.append(location)
writer.writerow(rowresults)
def send_CSV(text, csvFile, recipient):
email = Email()
# Absender
email.from_address = "root@server.de"
email.from_caption = "server"
# Empfaenger
email.recipients.add(recipient, recipient[len(recipient)-15])
# Betreff
email.subject = "Inventar"
# Nachricht
email.message = text
# Anhaenge
email.attachments.add_filename(csvFile)
# Senden
if email.send():
print "Nachricht gesendet."
else:
print "Die Nachricht wurde nicht versendet."
Vielleicht liegt es daran?
Stehe leider ein bissel auf dem Schlauch wie ich die verschickte E-Mail in roher Form bereitstelle.
Dein Code sieht etwas komische aus. Die Einrückungen sind nicht gleichmäßig, gibt es damit keine Fehler vom Python-Interpreter?
Für die Erzeugung von CSV-Dateien gibt es übrigens in der Standard-Bibliothek das Modul http://docs.python.org/library/csv.html
Zum Testen reicht auch eine simple Datei, z. B. als /tmp/foo.csv:
Dann funktioniert das hier:
In mutt kannst Du die rohe E-Mail durch Drücken von 'h' anzeigen.
Für die Erzeugung von CSV-Dateien gibt es übrigens in der Standard-Bibliothek das Modul http://docs.python.org/library/csv.html
Zum Testen reicht auch eine simple Datei, z. B. als /tmp/foo.csv:
Code: Alles auswählen
1,foo
2,bar
3,baz
Code: Alles auswählen
from simplemail import Email
email = Email()
email.from_address = "ich@example.com"
email.recipients.add("du@example.com")
email.smpt_server = "smtp.example.com"
email.subject = "GET RICH NOW!!!!1!"
email.message = "see subject"
email.attachments.add_filename("/tmp/foo.csv")
email.send()
https://www.xing.com/go/invite/18513630.6a91d4
danke für die schnelle Reaktion.
Einrückungsprobleme habe ich nicht, es wird kein Fehler ausgegeben.
Wie ich mutt dazu bringe die Rohdaten bei sowas hier auszugeben kriege ich noch raus.
Mein befehl war immer wie folgt :
Dein Beispiel funktioniert, wie meine Lösung ja auch. Ich werde mirt wohl mal die Standard-Bibliothek anschauen. Die Datei ist aber trotz allem richtig aufgebaut, da Sie beim versenden durch z.B. Mutt korrekt ist, nur durch simplemail halt nicht ???
Einrückungsprobleme habe ich nicht, es wird kein Fehler ausgegeben.
Wie ich mutt dazu bringe die Rohdaten bei sowas hier auszugeben kriege ich noch raus.
Mein befehl war immer wie folgt :
Code: Alles auswählen
os.system("echo test| mutt -s %s -a /tmp/test.csv ich@domäne.de", % subject)