2016-04-13 209 views
2

我试图访问AUTH类型为NTLM的SMTP服务器。使用来自Node.js的AUTH NTLM访问SMTP服务器

我使用nodemailer和nodemailer-SMTP-运输这样:

var config = require('./config.json'); 
var nodemailer = require('nodemailer'); 
var smtpTransport = require('nodemailer-smtp-transport'); 

var transporter = nodemailer.createTransport(smtpTransport({ 
    host : config.mailer.host, 
    port: config.mailer.port, 
    auth: { 
     user: config.mailer.username, 
     pass: config.mailer.password 
    }, 
    authMethod: 'PLAIN' 
})); 

但它不工作。我得到的错误是:

{ [Error: Invalid login: 504 5.7.4 Unrecognized authentication type] 
    code: 'EAUTH', 
    response: '504 5.7.4 Unrecognized authentication type', 
    responseCode: 504 } 

这是有道理的,因为如果我telnet到SMTP服务器

ehlo server.domain.net 
250-server.domin.net Hello [10.100.10.100] 
250-SIZE 
250-PIPELINING 
250-DSN 
250-ENHANCEDSTATUSCODES 
250-X-ANONYMOUSTLS 
250-AUTH NTLM 
250-X-EXPS GSSAPI NTLM 
250-8BITMIME 
250-BINARYMIME 
250-CHUNKING 
250-XEXCH50 
250 XRDST 

,并进入

AUTH PLAIN 

我得到

504 5.7.4 Unrecognized authentication type 

但是在Node内部,如果我更改authMeth od到'NTLM',我得到一个错误,说

{ [Error: Unknown authentication method "NTLM"] code: 'EAUTH' } 

我怀疑nodemailer只是不支持NTLM。如果是这种情况,我如何连接到需要NTLM身份验证类型的SMTP服务器?

谢谢

+1

https://github.com/nodemailer/nodemailer/issues/314 - 看起来我们运气不好 - 写作时的最后一条评论是来自维护者说的:“我对NTLM本身没有任何反应。我只是不知道如何测试它似乎是微软的具体情况,我对基于Windows的系统一无所知“ – Stevie

回答

2

我的公司几天前遇到同样的问题。我们考虑的选择是:

  1. 询问Exchange服务器管理员启用STARTTLS,以简明的身份验证(它是安全的,似乎只涉及滴答一对夫妇的复选框)
  2. 设置本地继电器(如后缀)该继电器到Exchange,并使用来自nodemailer
  3. 叉nodemailer后缀继电器,并添加NTLM支持

不幸的是,我们打的很容易的选择(1)和(2),所以不得不到餐桌nodemailer政治问题。

我还没有发送拉请求,但叉是here。就目前使用它的最简单方法是通过NPM在你的包JSON直接引用该项目的GitHub,如:

"dependences": { 
    "nodemailer": "steveliles/nodemailer" 
} 

如果你有兴趣,大部分的变化实际上是在子子项目(smtp-connection),并且nodemailer,nodemailer-smtp-poolnodemailer-smtp-transport的叉子仅用于获取我的smtp连接分支。

我们并不需要执行NTLM protocol,因为SamDecrock's httpntlm已经做了很多努力。

它仅针对Exchange 2007通过TLS(使用STARTTLS)进行了测试,没有域或工作站。

如果您确实需要在证书中使用域+工作站,只需将它们添加到nodemailer的options.auth并且它们将通过(例如)

var smtpConfig = { 
    host: 'ntlm.boo.hoo', 
    port: 25, 
    auth: { 
     domain: 'windows-domain', 
     workstation: 'windows-workstation', 
     user: '[email protected]', 
     pass: 'pass' 
    } 
}; 

我们甚至在更倒霉,我们要连接到没有一个有效的SSL证书,但幸运的是nodemailer可以通过选项设置tls: {rejectUnauthorized: false}处理Exchange服务器。

+0

合并请求46 - 看起来很快就会在主节点项目中提供NTLM支持 - https:/ /github.com/nodemailer/smtp-connection/pull/46 – Stevie