2016-07-25 19 views
0

Mein Python-Skript (wie folgt) kann einen ".txt" -Anhang senden, aber leider hat der empfangene Anhang das "\ n" verloren, also sind alle Zeilen zusammen was mein Spaltenformat ruinierte. Kann mir bitte jemand helfen? Danke vielmals!Python-E-Mail-Anhang verliert Zeilenende-Ende " n"

msg['From'] = send_from 
msg['To'] = COMMASPACE.join(send_to) 
msg['Date'] = formatdate(localtime=True) 
msg['Subject'] = 'Subject of Email4' 

mailbody = "This is the content of Email4" 
msg.attach(MIMEText(mailbody)) 

with open("regresult.txt", "r") as fil: 
    part = MIMEApplication(
     fil.read(), 
     Name=basename("regresult.txt") 
    ) 
    part['Content-Disposition'] = 'attachment; filename="%s"' % basename('regresult.txt') 
    msg.attach(part) 

Update: Die ursprüngliche Datei (in Remote-Unix-Server mit VIM geöffnet) ist wie folgt: original file format

Das empfangene Dateiformat ist wie folgt: received

+0

können Sie den resultierenden Anhangstext anzeigen? und der ursprüngliche Text? –

+0

Ich denke, das Problem ist mit der Textdatei selbst. Der obige Code ist ziemlich geradlinig. 'MIMEApplication' codiert die Textdatei einfach mit base64 und der E-Mail-Client, der die E-Mail anzeigt, entschlüsselt sie, keine Komplikationen. Ich hatte einige Probleme mit dem Öffnen von Textdateien in Windows und die neuen Zeilenzeichen fehlten für mich. Probieren Sie 'unix2dos' oder' dos2unix' aus, bevor Sie die .txt-Datei anfügen. – gixxer

+0

@joelgoldstick, ich kann nur Bilder der beiden Formate hochladen. Der Ort zum Hochladen der TXT-Datei wurde nicht gefunden. – leoking87

Antwort

0
import smtplib 
import io 

sender = '[email protected]' 
receivers = ['[email protected]'] 
file = io.open('newfile.txt', 'r') 

message = file.readlines() 

try: 
    smtpObj = smtplib.SMTP('localhost') 
    smtpObj.sendmail(sender, receivers, message) 
    print("Successfully sent email") 
except Exception: 
    print("Error: unable to send email") 
0

Dank @ gixxer des Hinweis. Es ist das Formatproblem der txt-Datei selbst. Das End-of-Line-Zeichen im ursprünglichen txt ist "\ n", was auf Unix-Systemen gut funktioniert, aber nicht auf Windows. Windows verwendet stattdessen "\ r \ n". Also füge ich einfach "\ r \ n" am Ende jeder Zeile in der Originaldatei hinzu, und dann funktioniert es.