2016-09-01 2 views
1

Ich versuche, eine E-Mail mit benutzerdefinierten Empfänger, Betreff und Text in Python zu senden. Das bedeutet, ich möchte nicht Python's smtp packages, aber so etwas wie webbrowser verwenden, weil ich dies mit dem Standard-E-Mail-Client (Thunderbird in meinem Fall) mit den genannten Argumenten öffnen muss.Erweiterte mailto in Python verwenden

import webbrowser 
webbrowser.open("mailto:[email protected]&subject=mysubject", new=1) 

funktioniert, aber ich brauche es, den Empfänger aus einer Zeichenfolge zu erhalten ich vorher aus einer Textdatei gefunden und Körper zuvor erstellte ich.

Gibt es einen "einfachen" Weg, den ich nicht finden kann? Vielen Dank im Voraus.

+0

Verwenden String-Verkettung das Argument 'webbrowser.open()' zu erstellen. Was ist das Problem? – Barmar

+0

Warum bedeutet die Anpassung des Empfängers, des Betreffs und des Browsers, dass Sie dies im Webbrowser tun müssen? Das smtp-Paket kann diese Felder ausfüllen. – Barmar

+0

Ich habe es nicht gut formuliert und den Post jetzt bearbeitet. –

Antwort

2

Ich verwende die Variablen Empfänger und Subjekt die relativen Werte zu speichern. Ersetzen Sie einfach den Beispieltext zwischen einfachen Anführungszeichen durch Ihren tatsächlichen Wert.

recipient = 'emailaddress' 
subject = 'mysubject' 

Das Betreff-Feld weiß darf keine Leerzeichen enthalten, so dass sie mit url% 20 ASCII-Code codiert sein

subject = subject.replace(' ', '%20') 

die Funktion oben ersetzt den weißen Raum mit „% 20“ und Abtretungs das geänderte Subjekt der gleichen Variablen, da Sie es wiederverwenden können, brauchen Sie in diesem Fall wirklich kein anderes.

Es ist auch möglich, die urllib Modul zur URL-Codierung zu verwenden (urllib.urlencode() Methode sehen), aber es kann einfach die () Verfahren ersetzen Verwendung durchgeführt werden, so dass Sie ein anderes Modul Import vermeiden können nur dafür.

Jetzt müssen Sie den Text aus einer Textdatei laden und in einer Variablen speichern. Imagine haben Sie eine Textdatei body.txt genannt:

with open('body.txt', 'r') as b: 
    body = b.read() 

Bitte beachte, dass ich body.txt angenommen im gleichen Verzeichnis Ihrer Python-Skript ist, sonst im Dateinamen Sie die umfassen müssen vollständiger absoluter oder relativer Pfad zur Datei, gefolgt vom Dateinamen.

Ich benutzte die open() Funktion und biete ich zwei Parameter: die erste ist die Dateiname, die zweite ist die Modus Sie die Datei öffnen möchten. Sie möchten die Datei lesen, sodass Sie sie unter Lesemodus ('r') öffnen müssen. Sobald Sie die Datei geöffnet haben, müssen Sie in der Lage sein, die Datei mit einer Variablen zu identifizieren, um einige Operationen auszuführen. Diese Art von Variable heißt technisch Handle, in diesem Fall nannte ich es b.

nun alle Text zum Lesen können Sie b.read() verwenden und dann können Sie es auf die Variable Körper zuweisen.(Wenn Sie wollte es Zeile für Zeile lesen, würden Sie getan: b.readline() aber Sie dies in diesem Fall nicht wollen.)

Bitte beachte, dass ich die mit Anweisung verwendet wird, diese ist die bevorzugte Methode zum Öffnen und Arbeiten mit Dateien, da die Datei am Ende automatisch geschlossen wird. Andernfalls müssten Sie sie manuell durchführen. Vor mit verfügbar war, würde man so etwas zu tun haben:

b = open('body.txt', 'r'): 
body = b.read() 
b.close() 

Jetzt ist es besser kodieren url auch die in der Variablen Körper enthaltenen String, so tun wir das gleiche, was wir für die tat Thema:

body = body.replace(' ', '%20') 

Jetzt ist es Zeit, die WebBrowser Modul zu verwenden und die Daten, die Sie so weit als Parameter bekamen zu liefern, die Strings verketten.

webbrowser.open('mailto:?to=' + recipient + '&subject=' + subject + '&body=' + body, new=1) 

Natürlich müssen Sie auch die WebBrowser Modul importieren, bevor es zu benutzen. Ich werde das ganze Programm ohne Kommentare aus Gründen der Klarheit neu zu schreiben:

import webbrowser 

recipient = 'emailaddress' 
subject = 'mysubject' 

with open('body.txt', 'r') as b: 
    body = b.read() 

body = body.replace(' ', '%20') 

webbrowser.open('mailto:?to=' + recipient + '&subject=' + subject + '&body=' + body, new=1) 
+1

Große Antwort mit ausgezeichneten Erklärungen, vielen Dank, dass Sie sich die Zeit genommen haben, dies für mich niederzuschreiben! –

+0

prego @FabioMancin :) – Fabio

+0

irgendwelche Ideen, wie man ein .jpg entweder als Anhang einfügt oder in den Fließtext einfügt? – ahmedhosny

0

Verwenden Sie die String-Verkettung.

recipient = '[email protected]' 
subject = 'mysubject' 
body = 'This is a message' 
webbrowser.open("mailto:?to='+ recipient + '&subject=' + subject + "&body=" + body, new=1)