2012-07-12 45 views
5

Vì vậy, tôi có thể đăng nhập và gửi thư qua gmail bằng cách sử dụng smtplib (sử dụng tập lệnh bên dưới), nhưng tôi chỉ tự hỏi nếu sử dụng oauth2 là một tùy chọn như với imaplib? Tôi đã không thấy bất cứ điều gì trên trang tài liệu smtplib về oauth và tôi đã không tìm thấy bất cứ điều gì googling. Cảm ơn.python & smtplib: Đang gửi thư qua gmail bằng oauth2 có thể?

#! /usr/bin/python 

import smtplib 

to = 'myemailaddress' 
gmail_user = 'myemailaddress' 
gmail_pwd = 'passwd' 
smtpserver = smtplib.SMTP("smtp.gmail.com",587) 
smtpserver.ehlo() 
smtpserver.starttls() 
smtpserver.ehlo 
smtpserver.login(gmail_user, gmail_pwd) 
header = 'To:' + to + '\n' + 'From: ' + gmail_user + '\n' + 'Subject:testing \n' 
print header 
msg = header + '\n this is test msg from me \n\n' 
smtpserver.sendmail(gmail_user, to, msg) 
print 'done!' 
smtpserver.close(); 

Edit:

Nhờ samy.vilar cho Giải thích rất chi tiết được cung cấp trong câu trả lời của mình. Tuy nhiên, tôi đang gặp một chút rắc rối. Đây là kịch bản của tôi:

#! /usr/bin/python 

import oauth2 as oauth 
import oauth2.clients.smtp as smtplib 

consumer = oauth.Consumer('anonymous', 'anonymous') 
token = oauth.Token('1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0', 'NysqNqVTulFsdHpSRrPP56sF') 

url = "https://mail.google.com/mail/b/[email protected]/smtp/" 

conn = smtplib.SMTP('smtp.googlemail.com', 587) 
conn.set_debuglevel(True) 
conn.ehlo('test') 
conn.starttls() 

conn.authenticate(url, consumer, token) 

header = 'To:[email protected]\n' + 'From: [email protected]\n' + 'Subject:testing \n' 
msg = header + '\n this is test msg from me \n\n' 
conn.sendmail('[email protected]', '[email protected]', msg) 

gì là khó hiểu với tôi, là nó xuất hiện để xác thực ok:

send: 'ehlo test\r\n' 
reply: '250-mx.google.com at your service, [75.173.8.127]\r\n' 
reply: '250-SIZE 35882577\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-STARTTLS\r\n' 
reply: '250 ENHANCEDSTATUSCODES\r\n' 
reply: retcode (250); Msg: mx.google.com at your service, [75.173.8.127] 
SIZE 35882577 
8BITMIME 
STARTTLS 
ENHANCEDSTATUSCODES 
send: 'STARTTLS\r\n' 
reply: '220 2.0.0 Ready to start TLS\r\n' 
reply: retcode (220); Msg: 2.0.0 Ready to start TLS 
send: 'AUTH XOAUTH R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21haWwvYi90ZXN0aW5nLm9hdXRoLjFAZ21haWwuY29tL3NtdHAvIG9hdXRoX2JvZHlfaGFzaD0iMmptajdsNXJTdzB5VmIlMkZ2bFdBWWtLJTJGWUJ3ayUzRCIsb2F1dGhfY29uc3VtZXJfa2V5PSJhbm9ueW1vdXMiLG9hdXRoX25vbmNlPSI3Nzc0ODMyIixvYXV0aF9zaWduYXR1cmU9IkxuckZHODdxdHRxZUhsUlQ1emRndmtEZ1UzTSUzRCIsb2F1dGhfc2lnbmF0dXJlX21ldGhvZD0iSE1BQy1TSEExIixvYXV0aF90aW1lc3RhbXA9IjEzNDIxNDI3NzIiLG9hdXRoX3Rva2VuPSIxJTJGTUk2QjJEcUpQNEZFa0RSTFVLckQ1bDQ2c1EwNzU4LTJ1Y0VLQlktRGVCMCIsb2F1dGhfdmVyc2lvbj0iMS4wIg==\r\n' 
reply: '235 2.7.0 Accepted\r\n' 
reply: retcode (235); Msg: 2.7.0 Accepted 

Nhưng sau đó khi nói đến việc gửi email, nó dường như quên rằng conn là đã chứng thực:

send: 'ehlo [192.168.2.4]\r\n' 
reply: '250-mx.google.com at your service, [75.173.8.127]\r\n' 
reply: '250-SIZE 35882577\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-AUTH LOGIN PLAIN XOAUTH\r\n' 
reply: '250 ENHANCEDSTATUSCODES\r\n' 
reply: retcode (250); Msg: mx.google.com at your service, [75.173.8.127] 
SIZE 35882577 
8BITMIME 
AUTH LOGIN PLAIN XOAUTH 
ENHANCEDSTATUSCODES 
send: 'mail FROM:<[email protected]> size=107\r\n' 
reply: '530-5.5.1 Authentication Required. Learn more at\r\n' 
reply: '530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 tu7sm3163839pbc.55\r\n' 
reply: retcode (530); Msg: 5.5.1 Authentication Required. Learn more at 
5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 tu7sm3163839pbc.55 
send: 'rset\r\n' 
reply: '250 2.1.5 Flushed tu7sm3163839pbc.55\r\n' 
reply: retcode (250); Msg: 2.1.5 Flushed tu7sm3163839pbc.55 
Traceback (most recent call last): 
    File "./gmail_send3.py", line 47, in <module> 
    conn.sendmail('[email protected]', '[email protected]', msg) 
    File "/usr/lib/python2.7/smtplib.py", line 713, in sendmail 
    raise SMTPSenderRefused(code, resp, from_addr) 
smtplib.SMTPSenderRefused: (530, '5.5.1 Authentication Required. Learn more at\n5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 tu7sm3163839pbc.55', '[email protected]') 
+0

Bạn có giữ nguyên dòng này không? 'consumer = oauth.Consumer ('vô danh', 'ẩn danh')' hoặc bạn có thay thế hai tham số cho khóa người tiêu dùng và bí mật người tiêu dùng thực tế của mình không? Nếu bạn đã tạo mã thông báo người dùng và bí mật người dùng với xoauth.py, hãy làm điều đó trước đây. Nếu không, hãy làm sau. – Ryan

Trả lời

17

Thú vị, tôi nghĩ rằng đó là có thể, tôi tìm thấy các liên kết sau đây
https://developers.google.com/google-apps/gmail/oauth_overview

CẬP NHẬT
https://github.com/google/gmail-oauth2-tools/wiki/OAuth2DotPyRunThrough
Đây là bước đi mới thông qua sử dụng OAuth2, nó có vẻ như xoauth đã được tuyên bố trở nên lỗi thời, tôi đã cập nhật URL để có được những tập tin cũ phiên bản xoauth.py, trong mọi trường hợp chúng ta vẫn cần nó, mặc dù có vẻ như Google đã thay đổi API của họ và hướng dẫn này không còn áp dụng được nữa.

bạn có thể sử dụng trực tiếp hoặc https://github.com/simplegeo/python-oauth2/ để thực sự giao tiếp, tôi khuyên bạn nên sử dụng sau này, linh hoạt hơn.

Dường như trước tiên bạn cần tải xuống xoauth.py tập lệnh.

$ wget https://raw.githubusercontent.com/google/gmail-oauth2-tools/master/obsolete/python/xoauth.py 
$ python xoauth.py --generate_oauth_token [email protected] 

xoauth.py:74: DeprecationWarning: the sha module is deprecated; use the hashlib module instead 
import sha 
oauth_token_secret: HFJEvjcTfiXSPxgLzDh-1yaH 
oauth_token: 4/EwUxCtY9ye1kdtb4uNJIcaUe9KXl 
oauth_callback_confirmed: true 
To authorize token, visit this url and follow the directions to generate a verification code: 
https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2FEwUxCtY9ye1kdtb4uNJIcaUe9KXl 
Enter verification code: 7XjT15fqk1aNe8152d9oTRcJ 
oauth_token: 1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0 
oauth_token_secret: NysqNqVTulFsdHpSRrPP56sF 

cho phép kiểm tra nó:

$ python xoauth.py --test_imap_authentication [email protected] \ 
--oauth_token=1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0 --oauth_token_secret=NysqNqVTulFsdHpSRrPP56sF 

xoauth.py:74: DeprecationWarning: the sha module is deprecated; use the hashlib module instead 
xoauth string (before base64-encoding): 
GET https://mail.google.com/mail/b/[email protected]/imap/ oauth_consumer_key="anonymous",oauth_nonce="18010070659685102619",oauth_signature="jTJv%2FAFATpzfq%2BZTLAAxFNmWPi0%3D",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1342084141",oauth_token="1%2FMI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0",oauth_version="1.0" 

XOAUTH string (base64-encoded): R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21haWwvYi90ZXN0aW5nLm9hdXRoLjFAZ21haWwuY29tL2ltYXAvIG9hdXRoX2NvbnN1bWVyX2tleT0iYW5vbnltb3VzIixvYXV0aF9ub25jZT0iMTgwMTAwNzA2NTk2ODUxMDI2MTkiLG9hdXRoX3NpZ25hdHVyZT0ialRKdiUyRkFGQVRwemZxJTJCWlRMQUF4Rk5tV1BpMCUzRCIsb2F1dGhfc2lnbmF0dXJlX21ldGhvZD0iSE1BQy1TSEExIixvYXV0aF90aW1lc3RhbXA9IjEzNDIwODQxNDEiLG9hdXRoX3Rva2VuPSIxJTJGTUk2QjJEcUpQNEZFa0RSTFVLckQ1bDQ2c1EwNzU4LTJ1Y0VLQlktRGVCMCIsb2F1dGhfdmVyc2lvbj0iMS4wIg== 

09:01.40 > COKI1 AUTHENTICATE XOAUTH 
09:01.44 < + 
09:01.45 write literal size 444 
09:02.68 < * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE 
09:02.68 < COKI1 OK [email protected] Testing Oauth authenticated (Success) 
09:02.68 > COKI2 SELECT INBOX 
09:03.09 < * FLAGS (\Answered \Flagged \Draft \Deleted \Seen) 
09:03.09 < * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)] Flags permitted. 
09:03.09 < * OK [UIDVALIDITY 3] UIDs valid. 
09:03.09 < * 3 EXISTS 
09:03.09 < * 0 RECENT 
09:03.09 < * OK [UIDNEXT 4] Predicted next UID. 
09:03.09 < COKI2 OK [READ-WRITE] INBOX selected. (Success) 

trông giống như chúng tôi đang tốt để đi. bạn có thể muốn thiết lập một virtualenv

$ git clone https://github.com/simplegeo/python-oauth2.git 
$ cd python-oauth2/ 
$ sudo python setup.py install 

và chân phải từ các tài liệu:

import oauth2 as oauth 
import oauth2.clients.imap as imaplib 

# Set up your Consumer and Token as per usual. Just like any other 
# three-legged OAuth request. 
consumer = oauth.Consumer('anonymous', 'anonymous') 
token = oauth.Token('1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0', 'NysqNqVTulFsdHpSRrPP56sF') 

# Setup the URL according to Google's XOAUTH implementation. Be sure 
# to replace the email here with the appropriate email address that 
# you wish to access. 
url = "https://mail.google.com/mail/b/[email protected]/imap/" 

conn = imaplib.IMAP4_SSL('imap.googlemail.com') 
conn.debug = 4 

# This is the only thing in the API for impaplib.IMAP4_SSL that has 
# changed. You now authenticate with the URL, consumer, and token. 
conn.authenticate(url, consumer, token) 

# Once authenticated everything from the impalib.IMAP4_SSL class will 
# work as per usual without any modification to your code. 
conn.select('INBOX') 
print conn.list() 


>>> conn.authenticate(url, consumer, token) 
20:11.73 > EPKK1 AUTHENTICATE XOAUTH 
20:11.78 < + 
20:11.78 write literal size 496 
20:11.93 < * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE 
20:11.93 < EPKK1 OK [email protected] Testing Oauth authenticated (Success) 
>>> conn.select('INBOX') 
20:17.47 > EPKK2 SELECT INBOX 
20:17.58 < * FLAGS (\Answered \Flagged \Draft \Deleted \Seen) 
20:17.58 < * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)] Flags permitted. 
20:17.58 < * OK [UIDVALIDITY 3] UIDs valid. 
20:17.58 < * 3 EXISTS 
20:17.58 < * 0 RECENT 
20:17.58 < * OK [UIDNEXT 4] Predicted next UID. 
20:17.58 < EPKK2 OK [READ-WRITE] INBOX selected. (Success) 
('OK', ['3']) 
>>> print conn.list() 
20:20.23 > EPKK3 LIST "" * 
20:20.28 < * LIST (\HasNoChildren) "/" "INBOX" 
20:20.28 < * LIST (\Noselect \HasChildren) "/" "[Gmail]" 
20:20.28 < * LIST (\HasNoChildren) "/" "[Gmail]/All Mail" 
20:20.28 < * LIST (\HasNoChildren) "/" "[Gmail]/Drafts" 
20:20.28 < * LIST (\HasNoChildren) "/" "[Gmail]/Important" 
20:20.28 < * LIST (\HasNoChildren) "/" "[Gmail]/Sent Mail" 
20:20.28 < * LIST (\HasNoChildren) "/" "[Gmail]/Spam" 
20:20.28 < * LIST (\HasNoChildren) "/" "[Gmail]/Starred" 
20:20.28 < * LIST (\HasNoChildren) "/" "[Gmail]/Trash" 
20:20.28 < EPKK3 OK Success 
('OK', ['(\\HasNoChildren) "/" "INBOX"', '(\\Noselect \\HasChildren) "/" "[Gmail]"', '(\\HasNoChildren) "/" "[Gmail]/All Mail"', '(\\HasNoChildren) "/" "[Gmail]/Drafts"', '(\\HasNoChildren) "/" "[Gmail]/Important"', '(\\HasNoChildren) "/" "[Gmail]/Sent Mail"', '(\\HasNoChildren) "/" "[Gmail]/Spam"', '(\\HasNoChildren) "/" "[Gmail]/Starred"', '(\\HasNoChildren) "/" "[Gmail]/Trash"']) 
>>> 

cho smtp:

import oauth2 as oauth 
import oauth2.clients.smtp as smtplib 

# Set up your Consumer and Token as per usual. Just like any other 
# three-legged OAuth request. 
# Set up your Consumer and Token as per usual. Just like any other 
# three-legged OAuth request. 
consumer = oauth.Consumer('anonymous', 'anonymous') 
token = oauth.Token('1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0', 'NysqNqVTulFsdHpSRrPP56sF') 

# Setup the URL according to Google's XOAUTH implementation. Be sure 
# to replace the email here with the appropriate email address that 
# you wish to access. 
url = "https://mail.google.com/mail/b/[email protected]/smtp/" 

conn = smtplib.SMTP('smtp.googlemail.com', 587) 
conn.set_debuglevel(True) 
conn.ehlo('test') 
conn.starttls() 

# Again the only thing modified from smtplib.SMTP is the authenticate 
# method, which works identically to the imaplib.IMAP4_SSL method. 
conn.authenticate(url, consumer, token) 



>>> conn.ehlo('test') 
send: 'ehlo test\r\n' 
reply: '250-mx.google.com at your service, [142.255.57.49]\r\n' 
reply: '250-SIZE 35882577\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-STARTTLS\r\n' 
reply: '250 ENHANCEDSTATUSCODES\r\n' 
reply: retcode (250); Msg: mx.google.com at your service, [142.255.57.49] 
SIZE 35882577 
8BITMIME 
STARTTLS 
ENHANCEDSTATUSCODES 
(250, 'mx.google.com at your service, [142.255.57.49]\nSIZE 35882577\n8BITMIME\nSTARTTLS\nENHANCEDSTATUSCODES') 
>>> conn.starttls() 
send: 'STARTTLS\r\n' 
reply: '220 2.0.0 Ready to start TLS\r\n' 
reply: retcode (220); Msg: 2.0.0 Ready to start TLS 
(220, '2.0.0 Ready to start TLS') 
>>> conn.authenticate(url, consumer, token) 
send: 'AUTH XOAUTH R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21haWwvYi90ZXN0aW5nLm9hdXRoLjFAZ21haWwuY29tL3NtdHAvIG9hdXRoX2JvZHlfaGFzaD0iMmptajdsNXJTdzB5VmIlMkZ2bFdBWWtLJTJGWUJ3ayUzRCIsb2F1dGhfY29uc3VtZXJfa2V5PSJhbm9ueW1vdXMiLG9hdXRoX25vbmNlPSI4MTEyMDkxNCIsb2F1dGhfc2lnbmF0dXJlPSJSaUFsTGdQWnpBSkNQJTJGWmx5aGRpYU1CV0xiTSUzRCIsb2F1dGhfc2lnbmF0dXJlX21ldGhvZD0iSE1BQy1TSEExIixvYXV0aF90aW1lc3RhbXA9IjEzNDIwODU2NzIiLG9hdXRoX3Rva2VuPSIxJTJGTUk2QjJEcUpQNEZFa0RSTFVLckQ1bDQ2c1EwNzU4LTJ1Y0VLQlktRGVCMCIsb2F1dGhfdmVyc2lvbj0iMS4wIg==\r\n' 
reply: '235 2.7.0 Accepted\r\n' 
reply: retcode (235); Msg: 2.7.0 Accepted 
>>> 

và gửi email:

>>> conn.authenticate(url, consumer, token) 
send: 'AUTH XOAUTH R0VUIGh0dHBzOi8vbWFpbC5nb29nbGUuY29tL21haWwvYi90ZXN0aW5nLm9hdXRoLjFAZ21haWwuY29tL3NtdHAvIG9hdXRoX2JvZHlfaGFzaD0iMmptajdsNXJTdzB5VmIlMkZ2bFdBWWtLJTJGWUJ3ayUzRCIsb2F1dGhfY29uc3VtZXJfa2V5PSJhbm9ueW1vdXMiLG9hdXRoX25vbmNlPSI2OTg3ODM3NiIsb2F1dGhfc2lnbmF0dXJlPSIlMkZjUGslMkJRVWVJY1RaYXp1ekkwR1FzdkdtbDFBJTNEIixvYXV0aF9zaWduYXR1cmVfbWV0aG9kPSJITUFDLVNIQTEiLG9hdXRoX3RpbWVzdGFtcD0iMTM0MjA4NjAxNCIsb2F1dGhfdG9rZW49IjElMkZNSTZCMkRxSlA0RkVrRFJMVUtyRDVsNDZzUTA3NTgtMnVjRUtCWS1EZUIwIixvYXV0aF92ZXJzaW9uPSIxLjAi\r\n' 
reply: '235 2.7.0 Accepted\r\n' 
reply: retcode (235); Msg: 2.7.0 Accepted 
>>> header = 'To:[email protected]\n' + 'From: [email protected]\n' + 'Subject:testing \n' 
>>> msg = header + '\n this is test msg from me \n\n' 
>>> conn.sendmail('[email protected]', '[email protected]', msg) 
send: 'mail FROM:<[email protected]> size=107\r\n' 
reply: '250 2.1.0 OK gb7sm6540492qab.12\r\n' 
reply: retcode (250); Msg: 2.1.0 OK gb7sm6540492qab.12 
send: 'rcpt TO:<[email protected]>\r\n' 
reply: '250 2.1.5 OK gb7sm6540492qab.12\r\n' 
reply: retcode (250); Msg: 2.1.5 OK gb7sm6540492qab.12 
send: 'data\r\n' 
reply: '354 Go ahead gb7sm6540492qab.12\r\n' 
reply: retcode (354); Msg: Go ahead gb7sm6540492qab.12 
data: (354, 'Go ahead gb7sm6540492qab.12') 
send: 'To:[email protected]\r\nFrom: [email protected]\r\nSubject:testing \r\n\r\n this is test msg from me \r\n\r\n.\r\n' 
reply: '250 2.0.0 OK 1342086030 gb7sm6540492qab.12\r\n' 
reply: retcode (250); Msg: 2.0.0 OK 1342086030 gb7sm6540492qab.12 
data: (250, '2.0.0 OK 1342086030 gb7sm6540492qab.12') 
{} 
>>> 

đảm bảo bạn xác thực trước khi gửi email.
hy vọng điều này giúp ...

CẬP NHẬT
Có thể có một lỗi mà đòi hỏi phải tái thẩm định, sau đây nên làm việc.

import oauth2 as oauth 
import oauth2.clients.smtp as smtplib 

consumer = oauth.Consumer('anonymous', 'anonymous') 
token = oauth.Token('1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0', 'NysqNqVTulFsdHpSRrPP56sF') 

url = "https://mail.google.com/mail/b/[email protected]/smtp/" 

conn = smtplib.SMTP('smtp.googlemail.com', 587) 
conn.set_debuglevel(True) 
conn.ehlo('test') 
conn.starttls() 

conn.authenticate(url, consumer, token) 

header = 'To:[email protected]\n' + 'From: [email protected]\n' + 'Subject:testing \n' 
msg = header + '\n this is test msg from me \n\n' 
try: 
    conn.sendmail('[email protected]', '[email protected]', msg) 
except Exception as ex: 
    print str(ex) 
    print 'retying ...' 
    conn.authenticate(url, consumer, token) 
    conn.sendmail('[email protected]', '[email protected]', msg) 

mặc dù bạn cũng có thể sử dụng xoauth trực tiếp như vậy:

import time 
import smtplib 
import xoauth 

consumer = xoauth.OAuthEntity('anonymous', 'anonymous') 
access_token = xoauth.OAuthEntity('1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0', 'NysqNqVTulFsdHpSRrPP56sF') 

xoauth_string = xoauth.GenerateXOauthString(consumer, access_token, '[email protected]', 'smtp', '[email protected]', str(xoauth.random.randrange(2**64 - 1)), str(int(time.time()))) 

smtp_conn = smtplib.SMTP('smtp.gmail.com', 587) 
smtp_conn.set_debuglevel(True) 
smtp_conn.ehlo() 
smtp_conn.starttls() 
smtp_conn.ehlo() 
smtp_conn.docmd('AUTH', 'XOAUTH ' + xoauth.base64.b64encode(xoauth_string)) 

header = 'To:[email protected]\n' + 'From: [email protected]\n' + 'Subject:testing \n' 
msg = header + '\n this is test msg from me \n\n' 
smtp_conn.sendmail('[email protected]', '[email protected]', msg) 

này dường như luôn luôn làm việc, tôi phải nộp một vé để python-oauth2 đội, cảm ơn bạn.

mặc dù điều này dường như cũng luôn làm việc

import oauth2 as oauth 
import oauth2.clients.smtp as smtplib 

consumer = oauth.Consumer('anonymous', 'anonymous') 
token = oauth.Token('1/MI6B2DqJP4FEkDRLUKrD5l46sQ0758-2ucEKBY-DeB0', 'NysqNqVTulFsdHpSRrPP56sF') 

url = "https://mail.google.com/mail/b/[email protected]/smtp/" 

conn = smtplib.SMTP('smtp.googlemail.com', 587) 
conn.set_debuglevel(True) 
conn.ehlo('test') 
conn.starttls() 
conn.ehlo() 
conn.authenticate(url, consumer, token) 
header = 'To:[email protected]\n' + 'From: [email protected]\n' + 'Subject:testing \n' 
msg = header + '\n this is test msg from me \n\n' 
conn.sendmail('[email protected]', '[email protected]', msg) 

nó trông bạn cần phải gọi conn.ehlo() trước khi chứng thực.

+0

cảm ơn bạn đã trả lời rất kỹ lưỡng. Tuy nhiên, tôi đang gặp rắc rối. Tôi đã chỉnh sửa câu hỏi ban đầu của mình để bao gồm tập lệnh mới và kết quả tôi nhận được. Bạn có thể có một cái nhìn? Cảm ơn. – nomadicME

+0

@nomadicME có vẻ như chúng có thể là một lỗi với 'oauth2' đã cập nhật câu trả lời để bao gồm một bản vá đơn giản cộng với việc sử dụng trực tiếp bằng cách sử dụng trực tiếp mà dường như luôn hoạt động. –

+0

cảm ơn bạn rất nhiều vì đã giúp đỡ. Hoạt động tuyệt vời! – nomadicME

Các vấn đề liên quan