【问题标题】:Building a simple SMTP client using Websockets使用 Websockets 构建一个简单的 SMTP 客户端
【发布时间】:2014-01-23 13:54:20
【问题描述】:

出于好奇和我的一些实验,我想知道在浏览器上构建 STMP 客户端需要什么。几年前这几乎是不可能的,但现在地球上几乎所有的浏览器似乎都实现了 Web 套接字,所以我只能假设这应该是可能的。我想知道一些关于如何在不深入了解the RFC for SMTP (RFC-2821) 的情况下实现这一点的确切细节,让自己更加困惑。多年来,我从嗅探 HTTP 数据包中学习了如何使用 HTTP 协议,并尝试从 Web 浏览器发送的内容和我的服务器所期望的内容中理解协议,我想知道是否可以使用相同的技术来揭秘SMTP 协议。我还记得大约 10 年前,我曾经使用免费的公开可用的 smtp 中继服务器通过 telnet 从 Windows 命令提示符发送电子邮件,我确信我仍然记得一些命令。我如何将所有这些组合在一起......用javascript说。

我很高兴知道是否有人尝试过这个并愿意分享这方面的一些知识。

【问题讨论】:

    标签: javascript http websocket smtp rfc


    【解决方案1】:

    您需要在 WebSocket 和普通 TCP 套接字(例如 websockify)之间建立一个协议桥接(免责声明:我创建了 websockify)。 websockify 项目包括一个简单的 telnet (wstelnet.html) 和 irc (wsirc.html) 客户端(来自同一时代,形式类似于 SMTP)。您应该能够修改其中之一来完成您所需要的。例如,如果您将 websockify 指向您的 SMTP 服务器,然后加载 wstelnet.html 并连接到 websockify 实例,那么您可以manually interact with the SMTP server(就像 10 年前一样)。从该起点开始,您可以开始自动化部分交互。

    【讨论】:

    • 哇。谢谢卡纳卡!这真的很好。我很高兴尝试这个。
    【解决方案2】:

    你不能用 WebSockets 来做这件事,因为它们不是普通的套接字,而是存在于现有的 HTTP 连接中,有自己的框架等。出于安全原因,你的浏览器可能还禁止从浏览器内部访问 SMTP 端口。

    请参阅What's the main difference between bidirectional and directional sockets? 了解普通 TCP 连接和 WebSocket 之间的区别。

    【讨论】:

    • 您可以使用 WebSockets 执行此操作,但前提是您在另一端有一个 WebSocketTCP 网关,该网关接收 WebSocket 数据包并在将它们发送到目标 TCP 服务器之前剥离帧,并从目标服务器接收 TCP 数据包并在将它们发送到浏览器之前对其进行帧化。在这方面,您可以将 SMTP 消息(或任何其他 TCP 协议)包装在 WebSocket 消息中。
    • @RemyLebeau 你刚刚描述了websockify,我最初创建它是为了启用noVNC(HTML5 VNC 客户端),但它是单独的通用项目。
    【解决方案3】:

    Mailsac 有一个 SMTP-to-web-socket API documented here,尽管它是付费的。消息已经解析为 JSON,但原始原始数据被缓冲并包含在 JSON 中。

    披露:我在 Mailsac 工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      相关资源
      最近更新 更多