2016-07-25 164 views
0

我的python脚本(如下所示)可以发送一个“.txt”附件,但不幸的是收到的附件丢失了“\ n”,所以所有行都在一起这破坏了我的列格式。任何人都可以请给我一个帮助吗?非常感谢!Python电子邮件附件丢失换行符“ 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) 

更新:原始文件(与VIM远程Unix服务器开启)是这样的:original file format

接收的文件格式是这样的:received

+0

你能显示生成的附件文本吗?和原文? –

+0

我认为问题出在文本文件本身。上面的代码非常简单。 'MIMEApplication'简单地使用base64对文本文件进行编码,并且查看电子邮件的电子邮件客户端对其进行解码,而没有任何复杂性。我在Windows中打开文本文件时遇到了一些问题,并且我缺少新的换行符。在附加.txt文件 – gixxer

+0

@joelgoldstick之前尝试使用'unix2dos'或'dos2unix',我只能上传两种格式的图像。无法找到上传.txt附件的地方。 – leoking87

回答

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

感谢@ gixxer的暗示。这是txt文件本身的格式问题。原始txt中的行尾字符是“\ n”,它在Unix系统上运行良好,但在Windows上不行。 Windows使用“\ r \ n”代替。所以我只是在原始文件的每一行的末尾添加“\ r \ n”,然后它就可以工作。