ไม่สามารถส่งอีเมลผ่าน python โดยใช้ gmail - smtplib.SMTPException: เซิร์ฟเวอร์ไม่รองรับส่วนขยาย SMTP AUTH

ฉันแค่ต้องการส่งอีเมลใน python พร้อมไฟล์แนบ

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('[email protected]','fu')
    smtp.sendmail(send_from, send_to, msg.as_string())
    smtp.close()

ATTACHMENTS = ['/tmp/2013-11-04-test.csv']
send_from=['[email protected]']
send_to=['[email protected]']
subject='adfadfadf'
text = 'adfadfadf'
send_mail(send_from, send_to, subject, text, files=ATTACHMENTS)

ฉันจะตรวจสอบสิทธิ์ได้อย่างไร? ฉันต้องระบุชื่อผู้ใช้และรหัสผ่าน ยังไง?

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('[email protected]','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.

person Tampa    schedule 04.11.2013    source แหล่งที่มา
comment
เป็นไปได้ที่ซ้ำกันของ กำลังพยายามส่งอีเมล (Gmail เป็นผู้ให้บริการอีเมล ) โดยใช้ Python   -  person alko    schedule 04.11.2013


คำตอบ (2)


คุณต้องโทรไปที่ starttls() ก่อนเข้าสู่ระบบ:

smtp = smtplib.SMTP('smtp.gmail.com:587')
smtp.starttls()
smtp.login('[email protected]', 'fu')

นอกจากนี้ send_from ของคุณควรเป็น str ไม่ใช่ list:

send_from='[email protected]'

โปรดทราบว่า smtp.starttls() โทร smtp.ehlo() โดยปริยาย:

หากไม่มีคำสั่ง EHLO หรือ HELO ก่อนหน้านี้ในเซสชันนี้ เมธอดนี้จะลองใช้ ESMTP EHLO ก่อน https://docs.python.org/2/library/smtplib.html#smtplib.SMTP.starttls

person Robᵩ    schedule 04.11.2013

ใน Gmail คุณต้องให้ smtp.ehlo() ก่อน smtp.starttls() ซึ่งซ้ำกับ จะส่งอีเมลด้วย Gmail ในฐานะผู้ให้บริการโดยใช้ Python ได้อย่างไร

person Hack5    schedule 30.12.2015