2012-07-12 11 views
5

Więc mogę się zalogować i wysyłać pocztę przez Gmaila za pomocą smtplib (używając poniższego skryptu), ale zastanawiałem się czy użycie oauth2 było opcją podobną do Imaplib? Nie widziałem nic na stronie dokumentacji smtplib o oauth i nie znalazłem nic googling. Dzięki.python i smtplib: Czy wysyłanie poczty za pośrednictwem Gmaila jest możliwe dzięki oauth2?

#! /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:

Dzięki samy.vilar na bardzo szczegółowym wyjaśnieniu przewidzianym w jego odpowiedzi. Mam jednak małe kłopoty. Oto mój skrypt:

#! /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) 

Co jest zastanawiające mnie jest to, że wydaje się, aby uwierzytelnić 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 

ale wtedy, gdy chodzi o wysłanie e-maila, wydaje się zapominać, że conn był już uwierzytelnione:

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

Czy utrzymałeś tę linię w stanie nienaruszonym? 'consumer = oauth.Consumer (" anonimowy "," anonimowy ")' lub czy zastąpiłeś dwa parametry faktycznego klucza konsumenta i tajnego klienta? Jeśli wygenerowałeś token użytkownika i klucz użytkownika za pomocą xoauth.py, wykonaj te pierwsze. W przeciwnym razie wykonaj to drugie. – Ryan

Odpowiedz

17

Ciekawe, myślę, że jest to możliwe, znalazłem poniższych linków
https://developers.google.com/google-apps/gmail/oauth_overview

UPDATE
https://github.com/google/gmail-oauth2-tools/wiki/OAuth2DotPyRunThrough
Jest to nowy spacer po użyciu OAuth2, wydaje się xoauth jest zadeklarowane przestarzałe, mam zaktualizować URL dostać starszą wersję xoauth.py plik, w razie nikogo jeszcze potrzebuje tego, chociaż wygląda na to, że Google zmienił swoje API i ta instrukcja nie jest już dostępna.

można użyć xoauth bezpośrednio lub https://github.com/simplegeo/python-oauth2/ faktycznie komunikować polecam ten ostatni, jego bardziej wszechstronny.

Widocznie trzeba najpierw pobrać xoauth.py skrypt.

$ 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 

pozwala przetestować go:

$ 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) 

wygląda jesteśmy dobrze iść. może chcesz założyć virtualenv

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

i przewieziony prosto z docs:

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"']) 
>>> 

dla 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 
>>> 

i wysyłać e-maile:

>>> 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') 
{} 
>>> 

upewnij się, że uwierzytelniasz się przed wysłaniem e-maili.
nadzieję, że to pomaga ...

UPDATE
Nie może być błąd, który wymaga ponownego uwierzytelniania dodaje powinno działać.

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) 

chociaż można również użyć xoauth bezpośrednio jako takie:

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) 

wydaje się to zawsze działa, powinien przesłać zgłoszenie do python-oauth2 zespołu, dziękuję.

choć TAKŻE wydają się zawsze działa

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) 

to wygląda trzeba zadzwonić conn.ehlo() przed uwierzytelniania.

+0

dziękuję za bardzo dokładną odpowiedź. Mam jednak pewne kłopoty. Zmieniłem moje oryginalne pytanie, dołączając mój nowy skrypt i dane wyjściowe, które otrzymuję w zamian. Mógłbyś rzucić okiem? Dzięki. – nomadicME

+0

@nomadicME wygląda na to, że może to być błąd z 'oauth2' zaktualizował odpowiedź, dodając prostą łatkę oraz bezpośrednio używając xoauth, który wydaje się działać zawsze. –

+0

dziękuję bardzo za pomoc. Działa świetnie! – nomadicME

Powiązane problemy