我正在尝试访问AUTH类型为NTLM的SMTP服务器。
我正在使用nodemailer和nodemailer-smtp-transport:
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内部,如果我将authMethod更改为'NTLM',我会收到错误消息
{ [Error: Unknown authentication method "NTLM"] code: 'EAUTH' }
我怀疑nodemailer不支持NTLM。如果是这种情况,如何连接到需要NTLM身份验证类型的SMTP服务器?
由于
答案 0 :(得分:4)
我的公司几天前遇到了同样的问题。我们考虑的选项是:
不幸的是,我们在简单的选项(1)和(2)上遇到了政治问题,所以不得不使用fork nodemailer。
我还没有发送拉取请求,但是分叉是here。目前最简单的使用方法是通过npm直接引用包json中的github项目,例如:
"dependences": {
"nodemailer": "steveliles/nodemailer"
}
如果您有兴趣,大部分更改实际上是在子项目(smtp-connection)中,以及nodemailer,nodemailer-smtp-pool和{的分支只需要获取我的smtp-connection fork就可以使用{3}}。
我们并不需要实施nodemailer-smtp-transport,因为NTLM protocol已经做了很多努力。
它仅针对Exchange 2007通过TLS(使用STARTTLS)进行了测试,没有域或工作站。
如果您确实需要凭据中的域+工作站,只需将它们添加到节点制作者options.auth
,它们就会通过,例如
var smtpConfig = {
host: 'ntlm.boo.hoo',
port: 25,
auth: {
domain: 'windows-domain',
workstation: 'windows-workstation',
user: 'user@somedomain.com',
pass: 'pass'
}
};
我们更不走运的是,我们连接的交换服务器没有有效的SSL证书,但幸运的是,nodemailer可以通过在选项中设置tls: {rejectUnauthorized: false}
来解决这个问题。
答案 1 :(得分:0)
从6.x.x版本开始,您可以使用自定义身份验证: https://github.com/nodemailer/nodemailer-ntlm-auth
答案 2 :(得分:0)
如果这是内部/服务类型的应用程序,并且您的服务器管理员不介意,您可以要求他们未经授权而创建主机,而直接删除
auth: {
user: '-----------',
pass: '-----------'
}
由于我只是创建一个服务类型的应用程序以按计划发送电子邮件,因此我的服务器管理员允许我这样做。
为我工作,但我确定此解决方案并不适合所有人!