2015-06-24 9 views
7

Ich versuche, ein Python-Skript zu schreiben, um eine E-Mail zu senden, die HTML-Formatierung verwendet und eine Menge von nicht brechenden Leerzeichen enthält. Allerdings, wenn ich es laufen, sind einige der & nbsp Strings durch Leerzeichen unterbrochen, der alle 171 Zeichen auftreten, wie dieses Beispiel zu sehen:Python mail fügt Leerzeichen alle 171 Zeichen ein

#!/usr/bin/env python 
import smtplib 
import socket 
from email.mime.text import MIMEText 

emails = ["[email protected]"] 
sender = "[email protected]{0}".format(socket.gethostname()) 

message = "<html><head></head><body>" 
for i in range(20): 
     message += "&nbsp;" * 50 
     message += "<br/>" 
message += "</body>" 
message = MIMEText(message, "html") 
message["Subject"] = "Test" 
message["From"] = sender 
message["To"] = ", ".join(emails) 
mailer = smtplib.SMTP("localhost") 
mailer.sendmail(sender, emails, message.as_string()) 
mailer.quit() 

Das Beispiel sollte eine leere E-Mail erzeugen, die nur aus Leerzeichen besteht , aber es endet etwas wie folgt aussehen:

  &nbsp ;          


         &nb sp;      


            & nbsp;   






      &nbs p;         


          &n bsp;   

Edit: Falls es wichtig ist, ich Ubuntu 15.04 mit Postfix für den sMTP-Client, und mit python2.6 läuft.

Antwort

5

Ich kann das auf eine Weise replizieren, aber meine Zeilenumbrüche kommen alle 999 Zeichen. RFC 821 sagt, dass die maximale Länge einer Zeile 1000 Zeichen einschließlich des Zeilenumbrüchens beträgt. Das ist wahrscheinlich der Grund.

Dieser Beitrag gibt eine andere Möglichkeit, eine HTML-E-Mail in Python zu senden, und ich glaube, der MIME-Typ "multipart/alternative" ist der richtige Weg. Sending HTML email using Python

+3

Das war das Problem, daher ist es einfach, nach jedem
ein \ n hinzuzufügen, damit dieses Problem verschwindet. –

+0

Aber das \ n erscheint in der E-Mail (mindestens so wie in Outlook gerendert). Wie können Sie den Zeilenumbruch einfügen, ohne dass er vom Empfänger als \ n erkannt wird? – user3450049

2

Ich bin der Entwickler von yagmail, ein Paket, das versucht, es einfach zu machen, E-Mails zu senden.

können Sie den folgenden Code verwenden:

import yagmail 
yag = yagmail.SMTP('[email protected]', 'mypassword') 

for i in range(20): 
    message += "&nbsp;" * 50 
    message += "<br/>" 

yag.send(contents = message) 

Beachten Sie, dass es standardmäßig eine HTML-Nachricht senden wird, und dass es fügt auch automatisch den alternativen Teil für nicht HTML-Browser.

Beachten Sie auch, dass das Auslassen der subject ein leeres Thema verlassen, und ohne ein to Argument wird es an sich selbst senden.

Beachten Sie außerdem, dass Sie, wenn Sie yagmail korrekt eingerichtet haben, sich einfach mit yag.SMTP() anmelden können, ohne den Benutzernamen & im Skript zu haben (und trotzdem sicher bleiben). Durch Weglassen des Passworts wird eine getpass angezeigt.

Hinzufügen einer Anlage ist so einfach wie Hinweis auf eine lokale Datei, z.B .:

yag.send(contents = [message, 'previously a lot of whitespace', '/local/path/file.zip'] 

Awesome ist es nicht? Danke für das Erlauben mir, einen netten Gebrauchfall für yagmail zu zeigen :)

Wenn Sie irgendwelche Funktionswünsche, Probleme oder Ideen haben, informieren Sie mich bitte an github.

+0

Dieses Paket sieht gut aus, aber leider kann ich keine externen Abhängigkeiten für mein Skript abrufen. Danke trotzdem. –

+0

@Programman Das ist schade. Ich hoffe du hast einmal die Möglichkeit es zu nutzen :) – PascalVKooten

Verwandte Themen