Microsoft Outlook in einem Python Script öffnen

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.
Antworten
SteeWeeDee
User
Beiträge: 34
Registriert: Donnerstag 18. September 2008, 14:10

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?
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

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ß
SteeWeeDee
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?
SteeWeeDee
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?)
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

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ß
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Es scheint mir wichtig, hier erst einmal die Begriffe zu klären. os.system ist kein Modul. os ist ein Modul.

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.
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Alles klar !
Danke für die Richtigstellung.

Gruß
Rainier
User
Beiträge: 19
Registriert: Mittwoch 22. August 2007, 10:03

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:

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)
Man kann das natürlich auch noch verbinden mit der Betreffzeile oder cc wie folgt:

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.
raumteiler
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:

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)
Nun möchte ich in der neuen Mail noch die Betreffzeile ausfüllen, leider klappt das nicht. Kann mir bitte jemand helfe.

Danke Michael
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

raumteiler hat geschrieben:Nun möchte ich in der neuen Mail noch die Betreffzeile ausfüllen, leider klappt das nicht.
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
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:

Code: Alles auswählen

subprocess.Popen("start mailto:"+recipient+"?subject="+subject+"&body="+ text , shell=True)
In diesem Fall kommt der Betreff richtig aber der Mailtext nicht, nur die Signatur

Code: Alles auswählen

subprocess.Popen("start mailto:"+recipient+"?subject="+subject+"?body="+ text , shell=True)
In diesem Fall kommt als Betreff: "Betreff?body=Mailtext Zeile 1."

Ich habe den Eindruck er akzeptiert nur einen Parameter.

Grüße
Michael
lunar

@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.
Antworten