No puedo enviar correos electrónicos a través de python usando gmail – smtplib.SMTPException: la extensión SMTP AUTH no es compatible con el servidor

Solo quiero enviar un correo electrónico en python con un archivo adjunto

import smtplib, os 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 send_mail(send_from, send_to, subject, text, files=[], server="localhost"): assert type(send_to)==list assert type(files)==list msg = MIMEMultipart() msg['From'] = send_from msg['To'] = COMMASPACE.join(send_to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach( MIMEText(text) ) for f in files: part = MIMEBase('application', "octet-stream") part.set_payload( open(f,"rb").read() ) Encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f)) msg.attach(part) smtp = smtplib.SMTP('smtp.gmail.com:587') smtp.login('fu@gmail.com','fu') smtp.sendmail(send_from, send_to, msg.as_string()) smtp.close() ATTACHMENTS = ['/tmp/2013-11-04-test.csv'] send_from=['fu@gmail.com'] send_to=['fu@gmail.com'] subject='adfadfadf' text = 'adfadfadf' send_mail(send_from, send_to, subject, text, files=ATTACHMENTS) 

¿Cómo me autentico? Tengo que proporcionar un nombre de usuario y contraseña. ¿Cómo?

 Traceback (most recent call last): File "/home/ubuntu/workspace/miliza-devops/classes/utilities.py", line 133, in  send_mail(send_from, send_to, subject, text, files=ATTACHMENTS) File "/home/ubuntu/workspace/miliza-devops/classes/utilities.py", line 124, in send_mail smtp.login('fu@gmail.com','fu') File "/usr/lib/python2.7/smtplib.py", line 576, in login raise SMTPException("SMTP AUTH extension not supported by server.") smtplib.SMTPException: SMTP AUTH extension not supported by server. 

Necesita una llamada a starttls() antes de iniciar sesión:

 smtp = smtplib.SMTP('smtp.gmail.com:587') smtp.starttls() smtp.login('fu@gmail.com', 'fu') 

Además, su send_from debe ser una str , no una list :

 send_from='fu@gmail.com' 

Tenga en cuenta que smtp.starttls() llama a smtp.ehlo() implícitamente:

Si no ha habido ningún comando EHLO o HELO anterior en esta sesión, este método primero intenta ESMTP EHLO. https://docs.python.org/2/library/smtplib.html#smtplib.SMTP.starttls

En gmail, también debes smtp.ehlo() un smtp.ehlo() antes de smtp.starttls() Esto también es un duplicado de ¿Cómo enviar un correo electrónico con Gmail como proveedor utilizando Python?