2017-01-17 97 views
0

我試圖使用Python成功驗證Exchange SMTP網關。嘗試從Python和NTLM庫發送電子郵件時出現錯誤535

我使用的是https://github.com/jborean93/ntlm-auth和Python 3.5.2的ntlm_auth模塊。

  1. 我可以使用這些憑據登錄到webmail。我知道他們工作。
  2. 我可以使用PowerShell發送電子郵件,我知道這很有用。

這是我正在使用的代碼。我已閱讀NTLM規範,並且服務器不接受已認證的消息。 5.7.3是一個通用錯誤,是否有更好的方法來處理這種情況?

from smtplib import SMTP 
from ntlm_auth.ntlm import Ntlm 
import socket 
from smtplib import SMTPException, SMTPAuthenticationError 

workstation = socket.gethostname().upper() 

def ntlm_authenticate(smtp, domain, username, password): 
    code, response = smtp.docmd("AUTH", "NTLM") 
    ntlm_context = Ntlm(ntlm_compatibility=2) 
    if code != 334: 
     raise SMTPException("Server did not respond as expected to NTLM negotiate message") 

    code, response = smtp.docmd(ntlm_context.create_negotiate_message(domain, workstation).decode()) 

    if code != 334: 
     raise SMTPException("Server did not respond as expected to NTLM challenge message") 

    ntlm_context.parse_challenge_message(response) 

    code, response = smtp.docmd(ntlm_context.create_authenticate_message(username, password, 
                     domain, workstation).decode()) 
    if code != 235: 
     raise SMTPAuthenticationError(code, response) 

EXCHANGE_PASSWORD = 'ThisIsReallyMyPassword!' 

fromaddr = '[email protected]' 
toaddrs = '[email protected]' 
msg= 'hello world!' 

print("Message length is", len(msg)) 

conn = SMTP('webmail.ourcompany.com') 
conn.set_debuglevel(1) 
conn.starttls() 
conn.ehlo() 
ntlm_authenticate(conn, 'DOMAINXXX', 'anthony.shaw', EXCHANGE_PASSWORD) 
conn.sendmail(fromaddr, toaddrs, msg) 
conn.quit() 

這裏是會話的痕跡,各種加密的話錯位安全

Message length is 12 
send: 'ehlo Anthonys-MacBook-Pro-2.local\r\n' 
reply: b'250-sdfsdf.sdfd.cloud Hello [121.123.184.192]\r\n' 
reply: b'250-SIZE 37748736\r\n' 
reply: b'250-PIPELINING\r\n' 
reply: b'250-DSN\r\n' 
reply: b'250-ENHANCEDSTATUSCODES\r\n' 
reply: b'250-STARTTLS\r\n' 
reply: b'250-X-ANONYMOUSTLS\r\n' 
reply: b'250-AUTH NTLM\r\n' 
reply: b'250-X-EXPS GSSAPI NTLM\r\n' 
reply: b'250-8BITMIME\r\n' 
reply: b'250-BINARYMIME\r\n' 
reply: b'250-CHUNKING\r\n' 
reply: b'250 XRDST\r\n' 
reply: retcode (250); Msg: b'asd.sds.cloud Hello [121.123.184.192]\nSIZE 37748736\nPIPELINING\nDSN\nENHANCEDSTATUSCODES\nSTARTTLS\nX-ANONYMOUSTLS\nAUTH NTLM\nX-EXPS GSSAPI NTLM\n8BITMIME\nBINARYMIME\nCHUNKING\nXRDST' 
send: 'STARTTLS\r\n' 
reply: b'220 2.0.0 SMTP server ready\r\n' 
reply: retcode (220); Msg: b'2.0.0 SMTP server ready' 
send: 'ehlo Anthonys-MacBook-Pro-2.local\r\n' 
reply: b'250-sdfdfs.dddd.cloud Hello [121.123.184.192]\r\n' 
reply: b'250-SIZE 37748736\r\n' 
reply: b'250-PIPELINING\r\n' 
reply: b'250-DSN\r\n' 
reply: b'250-ENHANCEDSTATUSCODES\r\n' 
reply: b'250-AUTH NTLM LOGIN\r\n' 
reply: b'250-X-EXPS GSSAPI NTLM\r\n' 
reply: b'250-8BITMIME\r\n' 
reply: b'250-BINARYMIME\r\n' 
reply: b'250-CHUNKING\r\n' 
reply: b'250 XRDST\r\n' 
reply: retcode (250); Msg: dd.bbb.cloud Hello [121.123.184.192]\nSIZE 37748736\nPIPELINING\nDSN\nENHANCEDSTATUSCODES\nAUTH NTLM LOGIN\nX-EXPS GSSAPI NTLM\n8BITMIME\nBINARYMIME\nCHUNKING\nXRDST' 
send: 'AUTH NTLM\r\n' 
reply: b'334 NTLM supported\r\n' 
reply: retcode (334); Msg: b'NTLM supported' 
send: 'TlRMTVNTUAABAAsdfsdfsdfsdfBQAoAAAAHAAcAC0AAAAGAbEdAAAAD0lUQUFTQU5USE9OWVMtTUFDQk9PSy1QUk8tMi5MT0NBTA==\r\n' 
reply: b'334 TlRMTVNTUAACAAAABwAHADgAAAA2gonilvWzl6ZwMogAAAAAAAAAALYAtgA/AAAABgLwIwAAAA9DU0ZNRERTAgAOAGMAcwBmAG0AZABkAHMAAQsdfdsdfsfRABEAFMARAAwADEARQAwADIABAAaAGMAcwBmAG0AZABkAHMALgBjAGsdfdsAAwA2AEEAVQAwADEARABEAFMARAAwADEARQAwADIALgBjAHMAZgBtAGQAZABzAC4AYwBsAG8AdQBkAAUAGgBjAHMAZgBtAGQAZABzAC4AYwBsAG8AdQBkAAcACAD5GqJRU3DSAQAAAAA=\r\n' 
reply: retcode (334); Msg: b'TlRMTVNTUAACAAAABwAHADgAAAA2gonilvWzl6ZwMogAAAAAAAAAALYAtgA/AAAABgLwIwAAAA9DU0ZNRERTAgAOAGMAcwBmAG0AZABkAHMAAQAaAEEAVQAwADEARABEAFMARAAwADEARQAwADIABAAaAGMAcwBmAG0AZABkAHMALgBjAGwAbwB1AGQAAwA2AEEAVQAwADEARABEAFMARAAwADEARQAwADIALgBjAHMAZgBtAGQAZABzAC4AYwBsAG8AdQBkAAUAGgBjAHMAZgBtAGQAZABzAC4AYwBsAG8AdQBkAAcACAD5GqJRU3DSAQAAAAA=' 
send: 'TlRMTVNTUAADAAAAGAAYAHUAAAfdfdfdfQAAAAUABQBIAAAADAAMAE0AAAAcABwAWQAAABAAEAClAAAANoKJ4gYBsR0AAAAPSVRBQVNhbnRob255LnNoYXdBTlRIT05ZUy1NQUNCT09LLVBSTy0yLkxPQ0FM8yeaKY0RjtEAAAAAAAAAAAAAAAAAAAAAD6wAaUOQF3QLY4klpKRYBYlkbYjyBNMJRLW0ZRQqzhDumAsyVC1uXg==\r\n' 
reply: b'535 5.7.3 Authentication unsuccessful\r\n' 
reply: retcode (535); Msg: b'5.7.3 Authentication unsuccessful' 
Traceback (most recent call last): 
    File "email_users.py", line 38, in <module> 
    ntlm_authenticate(conn, 'DOMAINXXX', 'anthony.shaw', EXCHANGE_PASSWORD) 
    File "email_users.py", line 24, in ntlm_authenticate 
    raise SMTPAuthenticationError(code, response) 
smtplib.SMTPAuthenticationError: (535, b'5.7.3 Authentication unsuccessful') 

回答

0

在的問題,我注意到,「它的工作原理在PowerShell中」。我在Windows PC上運行WireShark並再次運行PowerShell命令。

在Wireshark會話中,我看到了同樣的錯誤「535 5.7.3身份驗證失敗」。 PowerShell命令(Send-MailMessage)忽略錯誤並繼續發送消息(MAIL FROM,RCPT TO)並傳遞消息。

此處的問題是,5.7.3可能表示無法建立經過身份驗證的中繼會話,因爲此用戶沒有權限進行外部中繼。但是,您可以通過忽略錯誤並繼續發送消息來運行匿名中繼會話。

相關問題