|
|
 |
 |
 |
 |
Python Programming Language
|
 |
 |
 |
 |
 |
 |
 |
 |
SMTPAuthenticationError
Hi, I am trying to send a mail using smtplib. My server requires me to authenticate, for this I'm using SMTP.login function. However it fails- >>> server = smtplib.SMTP(host='mail.domain', port=25) >>> server.login('username', 'password')
Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/lib/python2.4/smtplib.py", line 587, in login raise SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError: (535, 'authorization failed (#5.7.0)') I am sure that I am giving the correct credentials. The same works in Thunderbird. Am I missing something here or am I supposed to use some other library for this? Thanks in advance, Ram
Ramashish Baranwal wrote: > Hi, > I am trying to send a mail using smtplib. My server requires me to > authenticate, for this I'm using SMTP.login function. However it > fails- >>>> server = smtplib.SMTP(host='mail.domain', port=25) >>>> server.login('username', 'password') > Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "/usr/lib/python2.4/smtplib.py", line 587, in login > raise SMTPAuthenticationError(code, resp) > smtplib.SMTPAuthenticationError: (535, 'authorization failed > (#5.7.0)') > I am sure that I am giving the correct credentials. The same works in > Thunderbird. Am I missing something here or am I supposed to use some > other library for this? > Thanks in advance, > Ram
Are you sure that your SMTP server uses this type of authentication? Some SMTP servers use POP3 followed by SMTP to authenticate instead. use telnet to verify, this link might help. http://www.computerperformance.co.uk/exchange2003/exchange2003_SMTP_A... -Larry
> > I am trying to send a mail using smtplib. My server requires me to > > authenticate, for this I'm using SMTP.login function. However it > > fails- > >>>> server = smtplib.SMTP(host='mail.domain', port=25) > >>>> server.login('username', 'password') > > Traceback (most recent call last): > > File "<stdin>", line 1, in ? > > File "/usr/lib/python2.4/smtplib.py", line 587, in login > > raise SMTPAuthenticationError(code, resp) > > smtplib.SMTPAuthenticationError: (535, 'authorization failed > > (#5.7.0)') > > I am sure that I am giving the correct credentials. The same works in > > Thunderbird. Am I missing something here or am I supposed to use some > > other library for this? > > Thanks in advance, > > Ram > Are you sure that your SMTP server uses this type of authentication? > Some SMTP servers use POP3 followed by SMTP to authenticate instead. > use telnet to verify, this link might help. > http://www.computerperformance.co.uk/exchange2003/exchange2003_SMTP_A...
Hi Larry, Thanks for the reply. I have worked according to the steps in the link you provided. From that it seems my server accepts base64 encoded username and password. I am able to login this way. How to give the same in smtplib? Ram
--- Ramashish Baranwal <ramashish.li@gmail.com> wrote: > > Are you sure that your SMTP server uses this type > of authentication? > > Some SMTP servers use POP3 followed by SMTP to > authenticate instead. > > use telnet to verify, this link might help.
http://www.computerperformance.co.uk/exchange2003/exchange2003_SMTP_A... > Hi Larry, > Thanks for the reply. I have worked according to the > steps in the link > you provided. From that it seems my server accepts > base64 encoded > username and password. I am able to login this way. > How to give the > same in smtplib? > Ram
To help debug this, you may want to try the following. 1) Copy smptlib.py into your local directory. On my box, you can find it here, or import sys; print sys.path to help find it on your box: /usr/local/lib/python2.3 2) Go the login() method, add some print statements there to see what's going on. I admit to not being an SMTP expert nor fully understanding the code at first glance, but here is some code iin smtplib.py that suggests you're close to getting this working, to the extent that your server wants base64 encoding: def encode_cram_md5(challenge, user, password): challenge = base64.decodestring(challenge) response = user + " " + hmac.HMAC(password, challenge).hexdigest() return encode_base64(response, eol="") Hope this helps. ___________________________________________________________________________ _________You snooze, you lose. Get messages ASAP with AutoCheck in the all-new Yahoo! Mail Beta. http://advision.webevents.yahoo.com/mailbeta/newmail_html.html
> To help debug this, you may want to try the following. > 1) Copy smptlib.py into your local directory. On my > box, you can find it here, or import sys; print > sys.path to help find it on your box: > /usr/local/lib/python2.3 > 2) Go the login() method, add some print statements > there to see what's going on. > I admit to not being an SMTP expert nor fully > understanding the code at first glance, but here is > some code iin smtplib.py that suggests you're close to > getting this working, to the extent that your server > wants base64 encoding: > def encode_cram_md5(challenge, user, > password): > challenge = base64.decodestring(challenge) > response = user + " " + > hmac.HMAC(password, challenge).hexdigest() > return encode_base64(response, eol="") > Hope this helps.
Thanks Steve, that helped a lot. smtplib was trying to a CRAM-MD5 auth which wasn't working. I don't know why. But when I made it do a LOGIN auth by changing its preferred_auth list, it worked. Login has its own preferred list of auth methods which is nice except that not all servers which advertise a particular method may be capable of handling that. It would have been good if there was optionally a way to specify in login() what method to use. For now, I am simply going to derive SMTP to form a class that does LOGIN auth. Ram
|
 |
 |
 |
 |
|