Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试从Python和NTLM库发送电子邮件时出现错误535_Python_Email_Exchange Server - Fatal编程技术网

尝试从Python和NTLM库发送电子邮件时出现错误535

尝试从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

我正在尝试使用Python成功地对Exchange SMTP网关进行身份验证

我正在使用和Python 3.5.2中的ntlm_auth模块

  • 我可以使用这些凭据登录到webmail。我知道它们有用
  • 我可以使用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 = '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可能意味着无法建立经过身份验证的中继会话,因为该用户没有外部中继的权限。但是,可以通过忽略错误并继续发送消息来运行匿名中继会话