如何使用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?