Docx Dokument mit Hyperlinks einlesen

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
HoLaHe
User
Beiträge: 15
Registriert: Montag 11. Juli 2022, 07:46

Hallo zusammen,


ich habe mir einen Random Passwort Generator programmiert. Um diesen jetzt etwas aufzuboren möchte ich das generierte Passwort per e-mail versenden. Das funktionier auch soweit. Ich habe das über folgende Codezeile programmiert:

Code: Alles auswählen

subprocess.Popen("start mailto:" + recipient + "?body=" + text4, shell=True)
Allerdings ist ja jetzt der Text "hard im Programmcode implementiert. Bei späteren anpassungen etwas blöd. Ich hab mir dann überlegt den e-mail Text in einen Datei auszulagern, die ich dann einlese. Allerdings hat der e-mail Text mittlerweile Hyperlinks drin. Ich habe das als .docx abgelegt. Einlesen würde ich dann das mit

Code: Alles auswählen

    with open('CTI-Rollout.docx', 'r') as b:
        body = b.read()

    print(body)
.

Da erhalte ich aber einen Fehler.

Frage an die Profils, macht es Sinn das so zu tun und ich suche weiter nach einer Lösung oder würdet Ihr das anders aufziehen?
Benutzeravatar
__blackjack__
User
Beiträge: 13064
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@HoLaHe: Ein Word-Dokument ist da irgendwie nicht so praktisch. E-Mail-Text mit Links ist ja in der Regel HTML. Ein Word-Dokument müsste man ja als Anhang versenden und der Empfänger muss da extra drauf klicken um es angezeigt zu bekommen.

Wenn Du einen Fehler bekommst, ist es immer sinnvoll auch zu verraten welcher das ist. Am besten 1:1 den Traceback in einen Code-Block im Beitrag kopieren. Denn es ist ja nicht immer so offensichtlich für andere Leser was das Problem ist. Hier ist das einfach: Word-Dokumente sind keine Textdateien, da wird es beim einlesen ziemlich wahrscheinlich einen `UnicodeDecodeError` geben wenn man Glück/Pech hat. (Es gibt auch Kodierungen bei denen diese unsinnige Aktion klappt, wo aber natürlich kein sinnvoller Text bei raus kommt.)

`b` ist kein guter Name für ein Datei-Objekt. Warum heisst das nicht `file`?

Für eine Mail mit Links könnte man eine HTML-Datei mit einer Template-Engine wie `jinja2` erstellen. Und ich würde auch trotzdem immer noch einen Textteil als erstes in die Mail packen, mit einem äquivalenten Inhalt, oder wenigstens einen Hinweis darauf, dass die Information im HTML-Teil steckt.

Da wäre dann das nächste Problem: Eine Multipart-Nachricht für das "body=" zu kodieren — das könnte etwas lang werden, eventuell zu lang, falls das überhaupt möglich ist. Versendet ``start`` überhaupt oder startet das nur ein E-Mailprogramm? Ich würde das eher so schreiben, das Python die Mail tatsächlich versendet, oder zumindest bei einem IMAP-Konto in den Entwürfe-Ordner legt, wenn da vor dem versenden noch mal ein Mensch drüber schauen soll. Das ist dann nicht vom Betriebssystem abhängig und welches E-Mail-Programm als Standard eingestellt ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
HoLaHe
User
Beiträge: 15
Registriert: Montag 11. Juli 2022, 07:46

Hallo Blackjack,

Vielen Dank für die ausführliche Antwort. Das mit dem IMAP ist eine gute Idee, jedoch haben wir im Betrieb einen Exchange Server bei dem IMAP nicht freigeschaltet ist. Somit fällt das auch aus.

ich werd es jetzt mal mit dem „win32com.client“ Modull versuchen. Dort dann eine neue Outlook email öffnen.
Antworten