Seite 1 von 1

[IronPython] unexpected token

Verfasst: Dienstag 21. Juli 2009, 16:07
von univeda
Hallo Python-Freunde!

Ich mache meine ersten Gehversuche in IronPython und habe dazu leider kein spezielles IronPython-Forum finden können.

Ich versuche über System.Net.Mail eine E-Mail in IronPython zu versenden, dies scheitert aber scheinbar an grundsätzlichem:

Code: Alles auswählen

import sys
sys.path.append("c:\entwicklung\python26\lib")

import clr
clr.AddReference('System.Net.Mail')

from System.Net.Mail import *

MailMessage mail = new MailMessage()
Beim Erstellen wird folgender Fehler gemeldet:

Code: Alles auswählen

unexpected token 'mail' (16) - F:\Entwicklung\IPY\cmdtest\cmdtest\Program.py:9,13
Ich verwende IronPython 2.6 Beta mit SharpDevelop 3.0. Der gleiche Fehler tritt aber auch auf, wenn ich direkt in der IronPython-Console versuche eine neue MailMessage zu erzeugen.

Kennt sich jemand in diesem Forum mit IronPython aus und kann einem IronPython-Anfänger auf die Sprünge helfen?

Verfasst: Dienstag 21. Juli 2009, 16:11
von cofi
Ich kenne mich nicht mit IronPython aus, aber ich gehe stark davon aus, dass es immernoch python ist, d.h. Zeile 9 so lauten sollte:

Code: Alles auswählen

mail = MailMessage()
Im Uebrigen: *-Importe sind meist eine schlechte Idee, ``import name as other_name`` und ``from name import other_name`` sind in den meisten Faellen zu bevorzugen - eigtl immer, wenn man nicht im Interpreter ist.

Verfasst: Dienstag 21. Juli 2009, 16:38
von univeda
Da hast du recht.

Ich habe das jetzt so realisiert:

Code: Alles auswählen

from System.Net.Mail import *

mail = MailMessage()

host = "ip_des_mailservers"
port = 25
sender = "absender@domain.local"
recipient = "empfänger@domain.local"
subject = "Testmail"
body = "Dies ist ein Test mit IronPython"

mail.To.Add(recipient)
mail.From = MailAddress(sender)
mail.Subject = subject
mail.Body = body

client = SmtpClient(host, port)

client.Send(mail)
So klappts. Danke!

Verfasst: Dienstag 21. Juli 2009, 18:46
von lunar
Nur um das nochmal zu wiederholen: Wenn man nur drei Namen aus dem Modul benötigt, rechtfertigt das keinen Sternchen-Import :)

Verfasst: Dienstag 28. Juli 2009, 15:04
von Fabian Kochem
Müsste dies:

Code: Alles auswählen

sys.path.append("c:\entwicklung\python26\lib")
nicht auch

Code: Alles auswählen

sys.path.append("c:\\entwicklung\\python26\\lib")
lauten?

Verfasst: Dienstag 28. Juli 2009, 15:08
von EyDu
Da "\e", "\p" und "\l" keine Escape-Sequenzen sind, funktioniert es auch so. Das explizite Voranstellen der doppelten Backslashes ist aber auf jeden Fall besser Stil. Hier könnte man auch

Code: Alles auswählen

r"c:\entwicklung\python26\lib"
verwenden.