Cant send email via python using gmail - smtplib.SMTPException: SMTP AUTH extension not supported by server

有些话、适合烂在心里 提交于 2019-12-03 05:19:27

问题


I just want to send an email in python with an attachment

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)

How do I auth? I have to provide a username and password. How?

Traceback (most recent call last):
  File "/home/ubuntu/workspace/miliza-devops/classes/utilities.py", line 133, in <module>
    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.

回答1:


You need a call to starttls() before you login:

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

Also, your send_from should be a str, not a list:

send_from='fu@gmail.com'

Note that smtp.starttls() calls smtp.ehlo() implicitly:

If there has been no previous EHLO or HELO command this session, this method tries ESMTP EHLO first. https://docs.python.org/2/library/smtplib.html#smtplib.SMTP.starttls




回答2:


On gmail you also have to give a smtp.ehlo() before smtp.starttls() This is also duplicate of How to send an email with Gmail as provider using Python?



来源:https://stackoverflow.com/questions/19765073/cant-send-email-via-python-using-gmail-smtplib-smtpexception-smtp-auth-extens

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!