Python邮件:编码的附件被截断

2024-04-19 19:23:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python脚本中使用以下函数发送包含两个附件的电子邮件:

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders

...

def sendMail(sender_name, to, subject, text, files=None,server="localhost"):
      assert type(to)==list
      if files:
        assert type(files)==list
      print "Files: ",files
      fro = sender_name

      msg = MIMEMultipart()
      msg['From'] = fro
      msg['To'] = COMMASPACE.join(to)
      msg['Date'] = formatdate(localtime=True)
      msg['Subject'] = subject

      msg.attach( MIMEText(text) )

      if files:
        for file in files:
# ************** File attaching - Start **************
                part = MIMEBase('application', "octet-stream")
                part.set_payload( open(file,"rb").read() )
                Encoders.encode_base64(part)
                part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))
                msg.attach(part)
# ************** File attaching - End **************

      server.set_debuglevel(1)
      server.ehlo()
      server.starttls()
      server.ehlo()
      server.sendmail(fro, to, msg.as_string())
      server.quit()

我收到邮件,附件也在那里,但由于某些原因,它们被截断了一点。我想我的编码过程中遗漏了一些东西。在

例如:

附件1:原始文件字节数为1433902,新字节数为1433600

附件2:原始文件字节数为2384703,新字节数为2383872

有什么想法吗?在


Tags: tofromimport附件serveremailmsgfiles
3条回答

是否与你当前的base64.MAXBINSIZE有关?Encoders.encode_base64在内部使用base64.encodestringbase64.MAXBINSIZE的默认值是57,可以尝试将其设置得更大:base64.MAXBINSIZE = 65536

如果文件已经写入,请确保.close()该文件,并为有效负载重新打开()/.read()。在

我的问题源于时间安排,这为我解决了问题。在

发现了问题。结果我试着在写入过程的缓冲区完全刷新之前发送文件。在

所以,这是一个同步问题,而不是编码问题。在

抱歉,谢谢你们的帮助!在

相关问题 更多 >