Mail versenden mit Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

Hallo,

hätte eine Frage ich muss eine Datenbank auslesen und ein Result des Queries per Mail versenden.
So weit bin ich leider noch nicht ich versuche jetzt mal generell mails zu versenden mit den Vorlagen die ich hier gefunden habe, leider bekomme ich beim Probieren immer eine Fehlermeldung.
Vielleicht kann mir einer von Euch sagen was sie bedeutet?
Smtp Server hab ich natürlich eingetragen inklusive User und Passwort.

Code: Alles auswählen

from simplemail import Email

email = Email(
        smtp_server = 'smtp.web.de',
        smtp_user = 'xxxxx',
        smtp_password = 'xxxx',

        from_address = 'xxxxxxx',
        to_address = 'xxxxxxx',
        subject = 'foo',
        message = 'bar'
        ).send()


Dies sind die Fehlermeldungen.

Traceback (most recent call last):
File "C:\xampp\python\testme.py", line 1, in <module>
from simplemail import Email
File "C:\xampp\python\simplemail.py", line 34, in <module>
from email.MIMEText import MIMEText
File "c:\xampp\python\lib\email\__init__.py", line 79, in __getattr__
__import__(self.__name__)
File "c:\xampp\python\lib\email\mime\text.py", line 9, in <module>
from email.encoders import encode_7or8bit
ImportError: No module named encoders



Danke HP
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo,

such doch mal im Showcase-Forum nach "Mail versenden". Gerold hat da nen schönes "Framework" gebastelt, dass man klasse nutzen kann. Schau Dir das mal an - auch zum Aufspüren des Fehler mag das hilfreich sein!
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Wie man sieht nutzt du bereits Gerold's simplemail
das funktioniert auch soweit, ich nutze es selber.

Die Fehlermeldung sagt dir das 'No module named encoders'
das heißt das Python das Modul nicht findet ;-)

Welche Python Version nutzt du?
Eine 'richtige' Version oder ein extra auf XAMPP zugeschnittene?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

hpa hat geschrieben:c:\xampp\python\lib\email\mime\text.py
Hallo hpa!

Das ist meine Vermutung:
Was hat der Ordner "python" unterhalb des Ordners "xamp" zu suchen? Ich kann mir nur vorstellen, dass das irgendeine verkorkste Python-Installation ist. Und wahrscheinlich funktioniert alles normal, wenn du Python richtig installierst und den Python-Ordner aus dem xampp-Ordner löscht.

http://halvar.at/python/xampp_python_cgi/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sr4l hat geschrieben:Wie man sieht nutzt du bereits Gerold's simplemail
das funktioniert auch soweit, ich nutze es selber.
Ooops ... Asche auf mein Haupt!
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

So hab python deinstalliert und nochmal installiert in C:\Python,
leider funktioniert die IDLE jetzt nicht mehr und der Python Interpreter lässt sich nicht mehr einbinden im Eclipse.
Hatte dieses Problem schon mal weiß aber nicht mehr was ich damals gemacht hab.

Hab schon in der Registry alles was mit python zu tun hat gelöscht aber keinen Erfolg ;)

vielleicht hat einer schon mal dasselbe problem gehabt ??
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

hpa hat geschrieben:Hab schon in der Registry alles was mit python zu tun hat gelöscht aber keinen Erfolg ;)
Eine Ahnung was du da tust? ;-)
hpa hat geschrieben:vielleicht hat einer schon mal dasselbe problem gehabt ??
Nein. Ohne Fehlermeldung ist das sehr schwer zu sagen.

Vielleicht Python (ggf. Eclipse) nochmal deinstallieren, gucken ob die Ordner C:\Python und C:\xampp\python leer sind. Installiere Python nochmal.

Und besorg und mal eine Fehlermeldung. ;-)
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

es gibt keine Fehlermeldung !!!!
Wenn man IDLE anklickt kommt kurz die Sanduhr und das wars ...

Hab auch alles deinstalliert und alle Folder gelöscht bevor ich Python neu installiert habe.


PS: Ich glaube schon zu wissen was ich mache ;)
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

so hab jetzt mal pywin installiert und da bekomm ich beim starten jetzt eine Fehlermeldung.

<Error getting traceback - cant import traceback><type 'exceptions.ImportError'>: No module named win32api

Irgendetwas muss mit die Pfade nicht passen.
Hab schon mehrmals alles gelöscht und Neuinstalliert.
Beim installieren funktiniert alles normal nur halt die Idle funktioniert nicht mehr...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

hpa hat geschrieben:<Error getting traceback - cant import traceback><type 'exceptions.ImportError'>: No module named win32api
Hallo hpa!

Da läuft einiges schief. Du kannst nicht mal "traceback" importieren.

START --> Ausführen --> "CMD /C SET > C:\set.txt"

Danach steht in der Datei "C:\set.txt" die Ausgabe des Befehls "SET". Lass uns mal nachsehen, ob etwas den Umgebungsvariablen schief läuft.

Dann: Suche nach einer Datei mit dem Namen "sitecustomize.py". Gibt es bei dir im System irgendwo so eine Datei? Wenn ja, was steht dort drinnen und wo hast du sie gefunden?

Was steht im Registryschlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.5\PythonPath"?

Stimmt der Pfad im Registryschlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.5\InstallPath"?

Hast du Python als Benutzer mit Administratorrechten installiert?

Was steht im Registryschlüssel "HKEY_CLASSES_ROOT\Python.File\shell\open\command"?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

Hallo Gerold,


danke erstmal, die Registry schaut auf den ersten Blick gut aus hab einen 2ten PC wo alles normal läuft und habs verglichen, es sieht gleich aus.

Install Path
C:\Python\

PythonPath
C:\Python\Lib;C:\Python\DLLs;C:\Python\Lib\lib-tk

HKEY_CLASSES_ROOT...
"C:\Python\python.exe" "%1" %*

Administrator bin ich am Rechner.

Die Datei "sitecustomize.py" hab ich nicht am Rechner.

Deinen ersten Befehl mit set.txt hab ich nicht machen können.
Enviroment Varibale .txt not set.

Ich hoffe du kannst damit was anfangen was mir weiterhilft.

mfg hp
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

hpa hat geschrieben:Deinen ersten Befehl mit set.txt hab ich nicht machen können. Enviroment Varibale .txt not set.
Hallo hpa!

Der fehlt jetzt noch. Versuche es noch einmal und achte auf die Syntax (ohne Anführungszeichen).

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

Hi,

das steht im set file.


ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\hpa\Application Data
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=HPA-MACHINE
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\hpa
LOGONSERVER=\\HPA-MACHINE
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Path=C:\Python; C:\Python\lib
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 13 Stepping 8, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0d08
ProgramFiles=C:\Program Files
PROMPT=$P$G
PYTHONHOME=c:\xampp\python
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOCUME~1\hpa\LOCALS~1\Temp
TMP=C:\DOCUME~1\hpa\LOCALS~1\Temp
USERDOMAIN=HPA-MACHINE
USERNAME=hpa
USERPROFILE=C:\Documents and Settings\hpa
windir=C:\WINDOWS

so könnte da vielleicht das PYTHONHOME falsch sein :))

mfg hp
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

Habs geschafft Variable geändert und jetzt gehts ;))

danke Gerold jetzt kann ich mich wieder meinen eigentlichen Problemen widmen.
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

Hallo,

Email versenden funktioniert nun auch mit dem Programm vom Gerold, es hat wohl echt an der verkorksten Installation gelegen. 8)

Nun hätt ich eine Frage ich bekomme die EMAiL Adresse aus der Datenbank an welche ich z.B. einen Text versenden muss.
Ich möchte nun gerne wissen wie ich diese EMAIL eben ins Programm einfügen kann.


Code: Alles auswählen

def abfrage():
    
    sql = "SELECT servername, sw_producer, enddate, comment, email FROM software s, notify n, users u WHERE s.rowid=software_id AND users_id=id_users AND enddate < date('now', '+72days')"
    cur = conn.cursor() 
    cur.execute(sql)
    data = cur.execute(sql)

    if (data is not 'NULL'): 
        item = 0 
        for item in data: 
            print item[4]
            data = item[4]
            print data
abfrage()

def versenden():
    
    Email( 
        from_address = "auernighp@chello.at", 
        to_address ="data", 
        subject = "Python_test", 
        message = "Email via Python" 
    ).send()
versenden()
in Data steht die email drinnen die ich von der Datenbank bekomme, dass ich das unten bei to_address so nicht einsetzen kann ist mir klar, kann mir vielleicht einer sagen wie ich das machen könnte ?

danke für eure Hilfe
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich kann mir nicht vorstellen, dass data jemals 'NULL' werden würde....

Davon abgesehen: was spricht dagegen, data[4] in eine Variable abzuspeichern und einer anderen Funktion übergeben?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

Der name data ist vielleicht ungünstig gewählt ich werd die variable auf email umbenennen denn im item[4] steht die email drinnen die ich haben möchte.

Meine Frage ist es wie ich diese Variable (email) im email Programm einsetzen kann damit an diese adresse eine Mail versendet wird.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

hpa hat geschrieben:Meine Frage ist es wie ich diese Variable (email) im email Programm einsetzen kann damit an diese adresse eine Mail versendet wird.
Im MUA? Oder in deinem Sendeprogramm?

Wenn letztes: einfach an einen Namen binden und als Parameter übergeben. Fertig.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hpa
User
Beiträge: 49
Registriert: Donnerstag 18. Oktober 2007, 16:56

Hi,

kann es jetzt nicht testen weil ich über smtp nicht rauskomme aber könnte es so funtionieren ?

Code: Alles auswählen

.
.
mailad=()

def abfrage():
    
    
    sql = "SELECT servername, sw_producer, enddate, comment, email FROM software s, notify n, users u WHERE s.rowid=software_id AND users_id=id_users AND enddate < date('now', '+72days')" 
    cur = conn.cursor() 
    cur.execute(sql) 
    data = cur.execute(sql) 

    if (data is not 'NULL'):
        
        item = 0 
        for item in data: 
            print item[4] 
            mailad = item[4] 
            print mailad 
abfrage() 

def versenden(): 
    
    Email( 
        from_address = "auernighp@chello.at", 
        to_address = mailad, 
        subject = "Python_test", 
        message = "Email via Python" 
    ).send() 
versenden() 

Danke HP
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das Python-Tutorial hast du dir nicht zufällig mal angesehen, oder?

Code: Alles auswählen

def abfrage():
    ...
    return mail

def versenden(mail):
    Email(
        ...
        to_address=mail,
    ).send()

mail = abfrage()
versenden(mail)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten