Binary file email attachment problem

后端 未结 3 2033
别跟我提以往
别跟我提以往 2021-01-05 06:11

Using Python 3.1.2 I am having a problem sending binary attachment files (jpeg, pdf, etc.) - MIMEText attachments work fine. The code in question is as follows...



        
相关标签:
3条回答
  • 2021-01-05 06:15

    solution from this SO answer

    from base64 import encodebytes
    for file in self.attachments:
        fp = open(file, 'rb')
        part = MIMEBase('application', "octet-stream")
        part.set_payload(encodebytes(fp.read()).decode())
        fp.close()
        part.add_header('Content-Transfer-Encoding', 'base64')
        part.add_header('Content-Disposition', 'attachment; filename="%s"' % file)
        msg.attach(part)   # msg is an instance of MIMEMultipart()
    
    server = smtplib.SMTP(host, port)
    server.login(username, password)
    server.sendmail(from_addr, all_recipients, msg.as_string())
    
    0 讨论(0)
  • 2021-01-05 06:24
    for file in self.attachments:
       fp = open(file,"rb")    
       part = MIMEApplication( fp.read() )    
       fp.close()    
       encoders.encode_base64(part)
    
       # the miracle
       part.set_payload( part.get_payload().decode('ASCII') )
    
       part.add_header('Content-Disposition', 'attachment; filename="%s"' % file)    
       msg.attach(part)   
    
    0 讨论(0)
  • 2021-01-05 06:36

    Ok - after much frustration and web-searching, I have found that the problem is a known bug that applies to Python 3.x, encoders.py, function encode_base64, which should read as follows...

    def encode_base64(msg):
        """Encode the message's payload in Base64.
    
        Also, add an appropriate Content-Transfer-Encoding header.
        """
        orig = msg.get_payload()
        encdata = _bencode(orig)
    
        # new line inserted to ensure all bytes characters are converted to ASCII
        encdata = str(encdata, "ASCII")
    
        msg.set_payload(encdata)
        msg['Content-Transfer-Encoding'] = 'base64'
    

    The bug has been raised as issue #4768, and was escalated to critical status on 2010-05-10. Hopefully it will be fixed in the next version (3.1.3?)

    Regards, Alan

    0 讨论(0)
提交回复
热议问题