Archivo adjunto de correo electrónico recibido como ‘noname’

La siguiente función de Python hace que el archivo adjunto se llame “noname” cuando debería ser “text_file.txt”. Como puede ver, he probado 2 enfoques diferentes con MIMEBase y MIMEApplication. También he probado MIMEMultipart (‘alternativa’) en vano.

def send_email(from_addr, to_addr_list, subject, html_body,plain_text_body, login, password, smtpserver='smtp.gmail.com:587', cc_addr_list=None, attachment=None, from_name=None): message=MIMEMultipart() plain=MIMEText(plain_text_body,'plain') html=MIMEText(html_body,'html') message.add_header('from',from_name) message.add_header('to',','.join(to_addr_list)) message.add_header('subject',subject) if attachment!=None: #attach_file=MIMEBase('application',"octet-stream") #attach_file.set_payload(open(attachment,"rb").read()) #Encoders.encode_base64(attach_file) #f.close() attach_file=MIMEApplication(open(attachment,"rb").read()) message.add_header('Content-Disposition','attachment; filename="%s"' % attachment) message.attach(attach_file) message.attach(plain) message.attach(html) server = smtplib.SMTP(smtpserver) server.starttls() server.login(login,password) server.sendmail(from_addr, to_addr_list, message.as_string()) server.quit() 

Cómo estoy llamando a la función:

 send_email( from_addr=from_email, to_addr_list=["some_address@gmail.com"], subject=subject, html_body=html, plain_text_body=plain, login=login, password=password, from_name=display_name, attachment="text_file.txt" ) 

Su encabezado no es correcto filename es el atributo no una cadena.

 # Add header to variable with attachment file attach_file.add_header('Content-Disposition', 'attachment', filename=attachment) # Then attach to message attachment file message.attach(attach_file)