我一直在使用这里找到的库:https://github.com/guileen/node-sendmail
它能够发送出现在我的邮箱中的电子邮件,尽管它看起来来 self 指定的任何域,甚至是具有身份验证层的现有域...
例如:
var sendmail = require('sendmail')();
sendmail({
from: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="197776346b7c6975605960766c6b7d7674787077377a7674" rel="noreferrer noopener nofollow">[email protected]</a>',
to: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="67130214132716164904080a" rel="noreferrer noopener nofollow">[email protected]</a>, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a3d7c6d0d7e3d0cccbd68dc0ccce" rel="noreferrer noopener nofollow">[email protected]</a>, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d7a3b2a4a397e6e1e4f9b4b8ba" rel="noreferrer noopener nofollow">[email protected]</a> ',
subject: 'test sendmail',
html: 'Mail of test sendmail ',
}, function(err, reply) {
console.log(err && err.stack);
console.dir(reply);
});
我发现将“发件人”设置为现有电子邮件(我不拥有)有时会起作用,因为我会收到该地址作为发件人地址的电子邮件。 我发现回复这些电子邮件会将回复发送给电子邮件的原始所有者...
在不造成安全漏洞的情况下,这怎么可能实现?我在这里发送什么样的电子邮件?这被认为是通过 NodeJS 发送电子邮件的合理方式吗?
最佳答案
这称为电子邮件欺骗,与 NodeJS 库实现无关。原文SMTP protocol没有提供任何机制来防止这种情况。
但是,后来的 RFC 标题为 Sender ID: Authenticating E-Mail引入了一种名为 SPF(发件人策略框架)的机制,可防止发送虚假的发件人详细信息。
This video非常清楚地解释了 SPF 的工作原理。只需电子邮件客户端(例如 Gmail)就可以与称为 SMTP session 的域建立连接,以确保电子邮件的有效性。
除了 SPF 之外,现在许多域名所有者还使用域名 key 识别邮件 (DKIM) 来进一步防止假冒发件人。这基本上就是 DKIM 的工作原理:
- 域所有者使用发送消息时使用的公钥/私钥对。
- 当授权用户发送电子邮件时,服务器使用私钥生成邮件的数字签名。接收服务器可以使用此签名来验证电子邮件。
如果你不熟悉公钥和私钥的概念,我绝对推荐你看这个video 。这是一种非常有趣的方法,可以在两个服务器之间安全地进行通信,而不会冒中间人窃听对话的风险。
关于javascript - 该 Node 库如何能够从任何(可能拥有的)域向我发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41094928/