尝试从Python和NTLM库发送电子邮件时出现错误535
我正在尝试使用Python成功地对Exchange SMTP网关进行身份验证 我正在使用和Python 3.5.2中的ntlm_auth模块尝试从Python和NTLM库发送电子邮件时出现错误535,python,email,exchange-server,Python,Email,Exchange Server,我正在尝试使用Python成功地对Exchange SMTP网关进行身份验证 我正在使用和Python 3.5.2中的ntlm_auth模块 我可以使用这些凭据登录到webmail。我知道它们有用 我可以使用PowerShell发送电子邮件,我知道这很有效 这是我正在使用的代码。我已经阅读了NTLM规范,服务器不接受经过身份验证的消息。5.7.3是一般性错误,是否有更好的方法处理此情况 from smtplib import SMTP from ntlm_auth.ntlm import Ntl
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 = 'anthony.shaw@ourcompany.com'
toaddrs = 'my.colleague@ourcompany.com'
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')
消息长度为12
发送:“ehlo Anthonys-MacBook-Pro-2.local\r\n”
答复:b'250-sdfsdf.sdfd.cloud您好[121.123.184.192]\r\n'
答复:b'250-尺寸37748736\r\n'
答复:b'250-流水线\r\n'
答复:b'250-DSN\r\n'
答复:b'250-ENHANCEDSTATUSCODES\r\n'
答复:b'250-STARTTLS\r\n'
答复:b'250-X-ANONYMOUSTLS\r\n'
答复:b'250-AUTH NTLM\r\n'
答复:b'250-X-EXPS GSSAPI NTLM\r\n'
答复:b'250-8BITMIME\r\n'
答复:b'250-BINARYMIME\r\n'
答复:b'250-分块\r\n'
答复:b'250 XRDST\r\n'
答复:retcode(250);Msg:b'asd.sds.cloud Hello[121.123.184.192]\nSIZE 37748736\nPipeling\nDSN\nENHANCEDSTATUSCODES\nSTARTTLS\nX匿名tls\nAUTH NTLM\nX EXPS GSSAPI NTLM\n8BITMIME\nbinaryime\nCHUNKING\nXRDST'
发送:'STARTTLS\r\n'
答复:b'220 2.0.0 SMTP服务器就绪\r\n'
答复:retcode(220);;消息:b'2.0.0 SMTP服务器就绪'
发送:“ehlo Anthonys-MacBook-Pro-2.local\r\n”
答复:b'250-sdfdfs.dddd.cloud您好[121.123.184.192]\r\n'
答复:b'250-尺寸37748736\r\n'
答复:b'250-流水线\r\n'
答复:b'250-DSN\r\n'
答复:b'250-ENHANCEDSTATUSCODES\r\n'
答复:b'250-AUTH NTLM登录\r\n'
答复:b'250-X-EXPS GSSAPI NTLM\r\n'
答复:b'250-8BITMIME\r\n'
答复:b'250-BINARYMIME\r\n'
答复:b'250-分块\r\n'
答复:b'250 XRDST\r\n'
答复:retcode(250);Msg:dd.bbb.cloud Hello[121.123.184.192]\nSIZE 37748736\nPipeling\nDSN\nENHANCEDSTATUSCODES\nAUTH NTLM LOGIN\nX EXPS GSSAPI NTLM\n8BITMIME\nbinaryime\nCHUNKING\nXRDST'
发送:“验证NTLM\r\n”
答复:支持b'334 NTLM\r\n'
答复:retcode(334);Msg:b'NTLM受支持'
发送:“TlrmtVntuaabaasDfsDfsDfBqaaaHaaCac0aaaGabedaaad0LuquftQu5Use9OWVMTTufdQK9PSY1QUK8TMI5MT0NBTA==\r\n”
回复:b'334 TlRMTvuacaaaabwahadgaaaa2gonilvwzl6zwmogaaaaaaaaaaaaaalalayatga/aaaaaabgLwiwaaaa9du0znrTagAgMacwBmag0AzabkahmaaqSdfDfsfrabefmarawaderqaawadabababagagagabagacWbg0Azabkahmaaqbababagagagabagagagagagagaa2aqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaq
答复:retcode(334);Msg:b'tlrmtvtuaaabwahadgaaaa2gonilvwzl6zwmogaaaaaaaaaaaalalayatga/aaaabglwiwaaaa9duznretagagmacwbmag0azabkahmaaaaaaaaaaaqaaaqaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaq
发送:'tlrmtvtuaaaaaagayayahuaafdfdfdfqaaaauabqiaaaaaaacabwawqaaaaaaeacabaaaanokj4gybsr0aaaapsvrbqvnhbnrb255lnnoyxdbtlrit05zuynqunnct09llvbsty0ylkxpq0fm8yearky0rjteaaaaaaaaaaaa6waoqf3qly4klpkyybyjybnjrlw0zrqzhdumasyvc1uxg=\r\n'
答复:b'535 5.7.3身份验证未成功\r\n'
答复:retcode(535);;消息:b'5.7.3身份验证失败'
回溯(最近一次呼叫最后一次):
文件“email_users.py”,第38行,在
ntlm_认证(conn,'DOMAINXXX','anthony.shaw',交换_密码)
文件“email_users.py”,第24行,在ntlm_中
引发SMTPAuthenticationError(代码、响应)
smtplib.SMTPAuthenticationError:(535,b'5.7.3身份验证未成功')
在问题中,我注意到“它在PowerShell中工作”。我在Windows PC上运行了WireShark,并再次运行了PowerShell命令
在Wireshark会话中,我看到了相同的错误“535.7.3身份验证失败”。
PowerShell命令(Send MailMessage)会忽略该错误,并继续发送该消息(邮件发件人、RCPT收件人),然后该消息将被传递
这里的问题是5.7.3可能意味着无法建立经过身份验证的中继会话,因为该用户没有外部中继的权限。但是,可以通过忽略错误并继续发送消息来运行匿名中继会话