2012-04-02 4 views
1

Ich habe ein seltsames Problem, bei dem die letzten 10-20 Zeichen meiner E-Mail abgeschnitten werden.E-Mails werden abgeschnitten, wenn HTML-Nachrichten mit smtplib.SMTP.sendmail gesendet werden

Der Code, der die E-Mail sendet, wird wie folgt dar:

#Get the runtime arguments. 
subject = args[0] 
content = str(args[1]).replace("\\n","<br/>") #Python automatically escapes the backslash in runtime arguments, so "\n" turns into "\\n". 

#Create the email message. 
msg = MIMEText(content, 'html') 
msg['From']=sender 
msg['To']=",".join(recipients) 
msg['Subject']=subject 

print "Sending email with subject \""+subject+"\" to: " + ",".join(recipients) 

print "Content: \n" + content; 
print "\n\n" 
print "msg.as_string(): \n" + msg.as_string() 

#Set the SMPTP server, and send the email. 
s = smtplib.SMTP(server) 
s.sendmail(sender,recipients,msg.as_string()) 
s.quit() 

Wie Sie im Code sehen können, drucke ich sowohl den Inhalt und die letzte Meldung auf dem Bildschirm, die beide richtig gedruckt. Wenn die E-Mail jedoch vom Empfänger empfangen wird, wird sie abgeschnitten. Ich bin nicht 100% sicher, ob es um eine bestimmte Anzahl von Zeichen oder um eine bestimmte Anzahl von Zeichen gekürzt wird, aber ich vermute, dass es das spätere ist.

Seltsamerweise werden die E-Mails gut gesendet, wenn sie im Klartext und nicht im HTML-Format gesendet werden. Aber leider verwenden die meisten Empfänger Outlook, das denkt, dass es besser als ich weiß, wo man neue Zeilen in reine Textemails setzt ...

Irgendein Einblick wird geschätzt.

Edit: Ich sollte auch erwähnen, dass dies nicht gut formatierte HTML ist. Grundsätzlich ersetze ich nur neue Zeilen mit

<br/> 

Ich bin mir nicht sicher, ob das einen Unterschied machen wird. Abgesehen von den Brems-Tags gibt es nichts, was auch nur entfernt einem HTML-Tag ähnelt. Das Problem besteht also nicht darin, dass ein unerwartetes Tag die Formatierung durcheinanderbringt.

Antwort

2

Wenn Sie alle Zeilenumbrüche aus der E-Mail entfernen, liegt ein Problem vor. SMTP-Server akzeptieren normalerweise keine Zeilen mit mehr als 1.000 Zeichen. Wenn Sie Free-Form-Daten senden möchten, kapseln Sie sie in etwas wie Quoted-Printable (wo Sie "unsichtbare" Zeilenumbrüche einfügen können, die vom Client entfernt werden) - achten Sie jedoch darauf, die Nachricht selbst korrekt zu verschlüsseln).

In quoted printable (RFC 2045), you can hex-encode any =22special=22 chara= 
cter, like this (or=20in=20fact,=20any=20character=20at=all), and add line= 
breaks where you see fit by prefixing them with an equals sign. Of cours= 
e, you also have to encode any literal equals sign, like this: =3D. Bette= 
r use a library which understands the details of this format than write yo= 
ur own encoder, though. 

Wenn Sie Content-Transfer-Encoding: binary geben Sie in der Theorie in Linien beliebiger Länge passieren kann, aber es ist besser und sicherer zu bleiben, was 7bit ermöglicht, und verwenden Sie einen geeigneten Content-Transfer-Encoding wie quoted-printable oder (wenn Sie wirklich wild gehen wollen) base64.

+0

Danke. Jetzt ersetze ich "\\ n" durch "\ n
" und es funktioniert korrekt. – Morglor

+0

Ich habe gerade \ n "newline" -Operator beim Verketten der langen Zeichenfolge hinzugefügt. Es wurde das Problem der E-Mail-Kürzung behoben. –

Verwandte Themen