首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Node.js使用AUTH访问SMTP服务器

从Node.js使用AUTH访问SMTP服务器
EN

Stack Overflow用户
提问于 2016-04-13 05:26:52
回答 3查看 7.6K关注 0票数 4

我试图使用AUTH类型的NTLM访问SMTP服务器。

我使用nodemailer和nodemailer传输:

代码语言:javascript
运行
复制
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'
}));

但不起作用。我得到的错误是:

代码语言:javascript
运行
复制
{ [Error: Invalid login: 504 5.7.4 Unrecognized authentication type]
  code: 'EAUTH',
  response: '504 5.7.4 Unrecognized authentication type',
  responseCode: 504 }

这是有道理的,因为如果我将网络传输到SMTP服务器中

代码语言:javascript
运行
复制
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

然后进入

代码语言:javascript
运行
复制
AUTH PLAIN

我得到了

代码语言:javascript
运行
复制
504 5.7.4 Unrecognized authentication type

但在节点内部,如果我将authMethod更改为“NTLM”,则会得到一个错误,即

代码语言:javascript
运行
复制
{ [Error: Unknown authentication method "NTLM"] code: 'EAUTH' }

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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-22 14:52:24

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

  1. 请exchange服务器管理员在STARTTLS下启用简单的auth (它是安全的,似乎只需要勾选几个复选框)
  2. 设置中继到Exchange的本地中继(例如后缀),并使用nodemailer的后缀中继
  3. 分叉nodemailer并添加NTLM支持

不幸的是,我们在简单的选项(1)和(2)上遇到了政治问题,因此不得不分叉新手。

我还没有发送拉请求,但叉子是这里。目前,最简单的使用方法是通过npm直接引用包json中的github项目,例如:

代码语言:javascript
运行
复制
"dependences": {
  "nodemailer": "steveliles/nodemailer"
}

如果您感兴趣,大多数更改实际上是在一个子项目(smtp-连接)中进行的,而揭发者nodemailer-smtp池nodemailer-smtp-传输的分叉只需要将我的smtp连接叉拿起来。

我们不需要实现NTLM协议,因为SamDecrock的httpntlm已经做了艰苦的工作。

它只在TLS (使用STARTTLS)上的Exchange 2007上进行了测试,而没有域或工作站。

如果您确实需要在凭据中使用域+工作站,只需将它们添加到nodemailer的options.auth中,它们就会被传递。

代码语言:javascript
运行
复制
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}来处理这个问题。

票数 4
EN

Stack Overflow用户

发布于 2019-06-28 08:23:16

在6.x.x版本中,您可以使用自定义auth:https://github.com/nodemailer/nodemailer-ntlm-auth

参考文献:https://nodemailer.com/smtp/#authentication

票数 0
EN

Stack Overflow用户

发布于 2019-09-13 17:09:25

如果这是一个内部/服务类型的应用程序,并且您的服务器管理员不介意,您可以要求它们未经授权创建一个主机,只需清除

代码语言:javascript
运行
复制
auth: {
    user: '-----------',
    pass: '-----------'
}

因为我只是创建一个服务类型的应用程序,只是为了发送电子邮件的时间表,我的服务器管理员允许我这样做。

为我工作,但我相信这个解决方案并不适合每一个人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36589321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档