如何使用Python将邮件作为提供者发送给Gmail?

我正尝试使用python发送电子邮件(Gmail),但我遇到了以下错误。

Traceback (most recent call last):  
File "emailSend.py", line 14, in <module>  
server.login(username,password)  
File "/usr/lib/python2.5/smtplib.py", line 554, in login  
raise SMTPException("SMTP AUTH extension not supported by server.")  
smtplib.SMTPException: SMTP AUTH extension not supported by server.

Python脚本如下。

import smtplib
fromaddr = 'user_me@gmail.com'
toaddrs  = 'user_you@gmail.com'
msg = 'Why,Oh why!'
username = 'user_me@gmail.com'
password = 'pwd'
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

在直接进入STARTTLS之前,您需要说EHLO

server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()

另外,您应该真的创建From:To:Subject:邮件标题,以空行分隔邮件正文并使用CRLF作为EOL标记。

例如

msg = "rn".join([
  "From: user_me@gmail.com",
  "To: user_you@gmail.com",
  "Subject: Just a message",
  "",
  "Why, oh why"
  ])

def send_email(user, pwd, recipient, subject, body):
    import smtplib

    FROM = user
    TO = recipient if isinstance(recipient, list) else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %snTo: %snSubject: %snn%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print 'successfully sent the mail'
    except:
        print "failed to send mail"

如果你想使用Port 465,你必须创建一个SMTP_SSL对象:

# SMTP_SSL Example
server_ssl = smtplib.SMTP_SSL("smtp.gmail.com", 465)
server_ssl.ehlo() # optional, called by login()
server_ssl.login(gmail_user, gmail_pwd)  
# ssl server doesn't support or need tls, so don't call server_ssl.starttls() 
server_ssl.sendmail(FROM, TO, message)
#server_ssl.quit()
server_ssl.close()
print 'successfully sent the mail'

我遇到了类似的问题,并且偶然发现了这个问题。 我收到了SMTP验证错误,但我的用户名/密码是正确的。 这是什么修复它。 我读到这个:

https://support.google.com/accounts/answer/6010255

简而言之,谷歌不允许你通过smtplib登录,因为它已经标记这种登录为“不太安全”,所以你必须做的是当你登录到你的谷歌帐户时去这个链接,并允许访问:

https://www.google.com/settings/security/lesssecureapps

一旦设置(请参阅下面的屏幕截图),它应该可以工作。

在这里输入图像描述

现在登录成功:

smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login('me@gmail.com', 'me_pass')

更改后的响应:

(235, '2.7.0 Accepted')

事前响应:

smtplib.SMTPAuthenticationError: (535, '5.7.8 Username and Password not accepted. Learn more atn5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 g66sm2224117qgf.37 - gsmtp')

还是行不通? 如果您仍然收到SMTPAuthenticationError,但现在代码是534,那么它的位置是未知的。 点击此链接:

https://accounts.google.com/DisplayUnlockCaptcha

点击继续,这应该会让您注册新应用程序10分钟。 因此,现在继续进行另一次登录尝试,它应该可以工作。

更新 :这似乎并没有马上工作,你可能会陷入一段时间在smptlib中得到这个错误:

235 == 'Authentication successful'
503 == 'Error: already authenticated'

该消息表示使用浏览器登录:

SMTPAuthenticationError: (534, '5.7.9 Please log in with your web browser and then try again. Learn more atn5.7.9 https://support.google.com/mail/bin/answer.py?answer=78754 qo11sm4014232igb.17 - gsmtp')

启用'lesssecureapps'后,去喝杯咖啡,回来,然后再次尝试'DisplayUnlockCaptcha'链接。 根据用户体验,更改可能需要一个小时才能启动。然后再次尝试登录过程。

链接地址: http://www.djcxy.com/p/50533.html

上一篇: How to send an email with Gmail as provider using Python?

下一篇: Send email using the GMail SMTP server from a PHP page