Hallo Python Gemeinde!
Ich habe ein Script geschrieben, das Daten ausliest (funktioniert und hat mit der Problemstellung nichts zu tun). Nun möchte ich diese Daten in eine E-Mail packen. Das Problem ist nur, dass ich nicht weiß, wie ich Outlook aufrufe.
Es gibt Tutorials, die die Mail auch sofort versenden mit CC und Attachments usw. Das geht mir schon zu weit. Es sollte nur Outlook geöffnet werden und dort eine Rohfassung einer Mail erstellt werden - also das Fenster, dass man erhält, wenn man auf "New E-Mail" klickt. Anschließend soll der Inhalt einer Datei(text.txt) als Text eingefügt werden. To:, CC: und alles Weitere wird per Hand eingegeben.
Kann jemand helfen?
Microsoft Outlook in einem Python Script öffnen
Hi,
auf die Schnelle hab ich das gefunden ...
http://blog.gungfu.de/archives/2006/12/ ... rschicken/
Schon etwas älter von daher gibts vielleicht auch andere Ansätze !?
Gruß
auf die Schnelle hab ich das gefunden ...
http://blog.gungfu.de/archives/2006/12/ ... rschicken/
Schon etwas älter von daher gibts vielleicht auch andere Ansätze !?
Gruß
-
- User
- Beiträge: 34
- Registriert: Donnerstag 18. September 2008, 14:10
Der wirft bei mir leider einen Fehler, hatte es auch schon mal versucht und bin jetzt auf der Suche nach Alternativen:
#$language = "Python"
#$interface = "1.0"
import win32com.client
def main():
send_mail_via_com("Text", "Test", "text@test.com")
def send_mail_via_com(text, subject, recipient, profilename="Outlook2003"):
s = win32com.client.Dispatch("Mapi.Session")
o = win32com.client.Dispatch("Outlook.Application")
s.Logon(profilename)
Msg = o.CreateItem(0)
Msg.To = recipient
Msg.CC = "WeitereAdressaten"
Msg.BCC = "Mailadresse"
Msg.Subject = subject
Msg.Body = text
#Anhang1 = "Pfad zum Anhang1"
#Anhang2 = "Pfad zum Anhang2"
#Msg.Attachments.Add(Anhang1)
#Msg.Attachments.Add(Anhang2)
#Msg.Send()
Fehler:
s = win32com.client.Dispatch("Mapi.Session")
COM Error: Invalid Class String(0x - 7ffbfe0d)
Eine andere Idee?
#$language = "Python"
#$interface = "1.0"
import win32com.client
def main():
send_mail_via_com("Text", "Test", "text@test.com")
def send_mail_via_com(text, subject, recipient, profilename="Outlook2003"):
s = win32com.client.Dispatch("Mapi.Session")
o = win32com.client.Dispatch("Outlook.Application")
s.Logon(profilename)
Msg = o.CreateItem(0)
Msg.To = recipient
Msg.CC = "WeitereAdressaten"
Msg.BCC = "Mailadresse"
Msg.Subject = subject
Msg.Body = text
#Anhang1 = "Pfad zum Anhang1"
#Anhang2 = "Pfad zum Anhang2"
#Msg.Attachments.Add(Anhang1)
#Msg.Attachments.Add(Anhang2)
#Msg.Send()
Fehler:
s = win32com.client.Dispatch("Mapi.Session")
COM Error: Invalid Class String(0x - 7ffbfe0d)
Eine andere Idee?
-
- User
- Beiträge: 34
- Registriert: Donnerstag 18. September 2008, 14:10
Habe nun mit os.systemos.system("start outlook.exe /c ipm.mail") das Outlook aus dem Script heraus starten können und eine neue Mail geöffnet. Jetzt fehlt nur noch das Einfügen des Textes (text = "" vielleicht?)
Ohje os.system ...
Da werden sich gleich die ein oder anderen melden ....
Das Modul ist veraltet und sollte nicht mehr genutz werden. Gib den begriff mal hier in die Forumsuche ein um dich zu informieren.
Statt dessen nimm das subprocess modul ...
Wie Du den Text für eine neue Mail an Outlook übergibst weiß ich leider so auch nicht. Denke aber das läßt sich googlen, bingen oder was auch immer.
Gruß
Da werden sich gleich die ein oder anderen melden ....
Das Modul ist veraltet und sollte nicht mehr genutz werden. Gib den begriff mal hier in die Forumsuche ein um dich zu informieren.
Statt dessen nimm das subprocess modul ...
Wie Du den Text für eine neue Mail an Outlook übergibst weiß ich leider so auch nicht. Denke aber das läßt sich googlen, bingen oder was auch immer.
Gruß
Es scheint mir wichtig, hier erst einmal die Begriffe zu klären. os.system ist kein Modul. os ist ein Modul.ichisich hat geschrieben:Ohje os.system ...
Da werden sich gleich die ein oder anderen melden ....
Das Modul ist veraltet und sollte nicht mehr genutz werden.
Jetzt stellen wir den Begriff "veraltet" noch ins richtige Licht. Das Modul os ist definitiv nicht veraltet. Die Funktion os.system ist auch nicht veraltet (weder unter Python 2.7, noch unter 3.1). Das subprocess-Modul bietet allerdings deutlich mehr Kontroll- und Zugriffsmöglichkeiten. Da früher oder später sehr viele Anfragen dort landen, wo die Benutzung des subprocess-Moduls praktischer ist, wird folglich sowohl hier im Forum wie auch in der Dokumentation die Verwendung des subprocess-Moduls statt der os.system-Funktion empfohlen.
Wenn ich es richtig verstanden habe, soll ja nur das Mailsende-Fenster mit einem bestehendem Body aufgerufen werden.
Da brauch nur über den subprocess als Statement folgendes eingegeben werden:
Man kann das natürlich auch noch verbinden mit der Betreffzeile oder cc wie folgt:
Da brauch nur über den subprocess als Statement folgendes eingegeben werden:
Code: Alles auswählen
import subprocess
text = '''
Franz jagt im komplett verwahrlosten Taxi quer durch Bayern.
Franz jagt im komplett verwahrlosten Taxi quer durch Bayern.
'''.replace(" ", "%20").replace("\n","%0d")
subprocess.Popen("start mailto:?body=" + text, shell=True)
Code: Alles auswählen
mailto:?cc=name@domain&subject=Testmail&body=Blablabla
Zuletzt geändert von Rainier am Dienstag 9. November 2010, 16:03, insgesamt 1-mal geändert.
-
- User
- Beiträge: 2
- Registriert: Dienstag 21. August 2012, 07:11
Hallo,
ich bin neu hier und habe ein ähnliches Problem.
Den Script habe ich so abgeändert:
Nun möchte ich in der neuen Mail noch die Betreffzeile ausfüllen, leider klappt das nicht. Kann mir bitte jemand helfe.
Danke Michael
ich bin neu hier und habe ein ähnliches Problem.
Den Script habe ich so abgeändert:
Code: Alles auswählen
import subprocess
recipient="name@domain.com"
subject="Betreff"
text = '''Mailtext Zeile 1.
Mailtext Zeile 2.
'''.replace(" ", "%20").replace("\n","%0d")
subprocess.Popen("start mailto:"+recipient+"?body="+ text , shell=True)
Danke Michael
Da du nicht geschrieben hast was du ausprobiert hast werfe ich einfach mal eine Idee rein. Vielleicht gibt es ja neben body auch noch subject als Parameter.raumteiler hat geschrieben:Nun möchte ich in der neuen Mail noch die Betreffzeile ausfüllen, leider klappt das nicht.
-
- User
- Beiträge: 2
- Registriert: Dienstag 21. August 2012, 07:11
Hallo /me,
entschuldige bitte, natürlich habe ich schon einige Varianten ausprobiert. Es gibt den Paramter subject, aber er funktioniert nicht zusammen mit body. Wenn ich den Paramter Subject einfüge, dann wird der Mailtext nicht mehr in den Body eingefügt, die Mail hat dann nur noch die Outlookstandardsignatur.
Folgende Sachen habe ich probiert:
In diesem Fall kommt der Betreff richtig aber der Mailtext nicht, nur die Signatur
In diesem Fall kommt als Betreff: "Betreff?body=Mailtext Zeile 1."
Ich habe den Eindruck er akzeptiert nur einen Parameter.
Grüße
Michael
entschuldige bitte, natürlich habe ich schon einige Varianten ausprobiert. Es gibt den Paramter subject, aber er funktioniert nicht zusammen mit body. Wenn ich den Paramter Subject einfüge, dann wird der Mailtext nicht mehr in den Body eingefügt, die Mail hat dann nur noch die Outlookstandardsignatur.
Folgende Sachen habe ich probiert:
Code: Alles auswählen
subprocess.Popen("start mailto:"+recipient+"?subject="+subject+"&body="+ text , shell=True)
Code: Alles auswählen
subprocess.Popen("start mailto:"+recipient+"?subject="+subject+"?body="+ text , shell=True)
Ich habe den Eindruck er akzeptiert nur einen Parameter.
Grüße
Michael
@raumteiler Mit "shell=True" selbst Du selbst dafür, dass Dein Kommando von der Shell interpretiert wird. Da sollte es Dich dann nicht überraschen, dass ein Kommando, welches ein Sonderzeichen der Shell enthält, nicht richtig funktioniert. Das kaufmännische Und ist ein solches Sonderzeichen.
Lese die Dokumentation des "subprocess"-Moduls, um herauszufinden, wie Du Dein Kommando so formulieren kannst, so dass "shell=True" nicht mehr benötigt wird und Dein Kommando auch mit kaufmännischem Und korrekt funktioniert.
Lese die Dokumentation des "subprocess"-Moduls, um herauszufinden, wie Du Dein Kommando so formulieren kannst, so dass "shell=True" nicht mehr benötigt wird und Dein Kommando auch mit kaufmännischem Und korrekt funktioniert.