javascript - 该 Node 库如何能够从任何(可能拥有的)域向我发送电子邮件?

标签 javascript node.js email

我一直在使用这里找到的库: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 的工作原理:

  1. 域所有者使用发送消息时使用的公钥/私钥对。
  2. 当授权用户发送电子邮件时,服务器使用私钥生成邮件的数字签名。接收服务器可以使用此签名来验证电子邮件。

如果你不熟悉公钥和私钥的概念,我绝对推荐你看这个video 。这是一种非常有趣的方法,可以在两个服务器之间安全地进行通信,而不会冒中间人窃听对话的风险。

关于javascript - 该 Node 库如何能够从任何(可能拥有的)域向我发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41094928/

相关文章:

email - 切换到office365后outlook发新邮件不起作用

node.js - 使用基于浏览器的模板引擎从站点抓取数据

javascript - 错误: write EPIPE on sendFile()?

css - Gmail 应用程序 (Android) 上的响应式电子邮件 - rem 和 heights

JavaScript 按钮不工作;代码与其他工作按钮相同?

javascript - 谷歌地图使用 lat/lng 从 ajax 成功返回的数据移动标记

javascript - jQuery - 查找和删除 div 的多个属性

javascript - 用鼠标单击并拖动绘制一个矩形 - javascript

javascript - 无法在 React 服务器端渲染中处理 UnhandledPromiseRejectionWarning

c# - 如何从 C# 中的文本中提取连续的电子邮件地址