【问题标题】:Client Side Only standalone Smtp Client/relay, for sending mails directly客户端 仅独立的 Smtp 客户端/中继,用于直接发送邮件
【发布时间】:2013-10-31 15:50:15
【问题描述】:

通常,当您发送电子邮件(使用 Thunderbird 或 Outlook)时,您不会直接发送。
示例:我有一个 gmail 地址,我想向 myopera 地址发送一封电子邮件。该过程将是:

用户->gmail 服务器(gmail-smtp-in.l.google.com)->myopera 服务器(in1.smtp.messagingengine.com)->最终用户将使用 pop/imap 下载它的电子邮件。
其中一个不便之处是大小:假设您有 50Mb 的附件:myopera 的限制是 60MB;但是gmail的限制是25MB,所以邮件会被拒绝,如果直接发到myopera会被接受。

但我在telnet 看到,可以直接使用 SMTP 命令发送邮件。

我想编写一个仅限客户端的 Web 应用程序,它将邮件转换为一组 SMTP 命令以进行发送。我应该很基础,不支持加密

我不知道如何从客户端创建 TCP 连接,所以,我的问题是:库是否已经存在?如果没有,我应该使用什么?我读过 WebSockets 的存在,但 Ajax 会更通用。

此外,我看到的大多数 WebSocket 的实际实现在我最新版本的网络浏览器中都不起作用,尽管它们“支持它”。还有来自 W3c 的原始 Socket API(我不知道实际支持它的 Web 浏览器)。
所以,我不想避免声明不可能在原始 TCP/ 附近创建UDP 会话。既然有可能,我无法想象没有人创建一种用于处理协议的库

【问题讨论】:

  • 这听起来像是一条非常糟糕的路线,您正在重新发明轮子,您的解决方案将是特定于平台/浏览器的,并且可能需要提升权限。
  • @NickolaiNielsen 不,Web 标准不是特定于平台的。最新的浏览器中还存在一个安全漏洞,这使得不需要提升权限:在 Windows 上,只需要浏览器存在于add/remove program。否则,有一个弹出窗口询问网络权限,可以拒绝并让浏览器运行。另见example:我想要一种更通用的方式,它可以在没有 node.js 的情况下工作。我'我认为某些东西已经存在,我不必从头开始。
  • node.js 是在浏览器之外运行的可执行文件,因此它可以访问原始 TCP 套接字。除非您使用漏洞利用或以某种方式破坏沙箱,否则它不会/不应该在浏览器中进行访问。
  • @NickolaiNielsen 我已经看到网络浏览器可以打开 TCP 端口,甚至可以在没有任何特权的情况下侦听传入连接(唯一的条件是它们本地安装在 windows/OSX 上)。一个例子是 Opera unite。 jSocket socketjs 是执行此操作但使用第三方插件的实现。我认识到,这与使用 Web 语言实现任意协议相同。它们是 navigator.registerProtocolHandler(),但我看不到任何在脚本中使用生成的输出的方法。 (抱歉,我认为现代浏览器让打开 telnet 会话变得容易)
  • 我找到了this

标签: smtp telnet client-side-scripting web-client


【解决方案1】:

对于 Objective-C 你可以使用https://github.com/jetseven/skpsmtpmessage

通过查看源代码,您可以了解 SMTP 的工作原理。

【讨论】:

  • EHLO :) 谢谢,但我完全了解 smtp 的工作原理。我经常使用 openssl 发送电子邮件以获取 starttls。我在XP下的时候,经常使用telnet gmail-smtp-in.l.google.com 25。此外,我要求提供网络语言,除了 ftp 服务器,我不想要服务器端的任何东西。
【解决方案2】:

你应该走另一条路。

如果我有这个问题,我仍然会使用某种服务器端组件,只需让服务器联系直接接收邮件服务器。

给定电子邮件:“someuser@somedomain.tld”,您可以在“somedomain.tld”上进行 DNS MX 记录查找并找到接收邮件服务器说“mail.somedomain.tld”,然后您可以告诉您的邮件发送组件将电子邮件直接发送到“mail.somedomain.tld”,这样您就可以立即获得有关邮件是否通过的反馈。

【讨论】:

  • 不,我只是想让它成为客户端,只是为了好玩。我想以与信条脚本相同的方式执行此操作。这主要是为了获得使用 TCP 套接字的经验。我希望实现一个可以在 Web 浏览器中工作的 Web 服务器,但让我们从更简单的开始。此外,我选择了一个微控制器来运行服务器。
  • 你不能在浏览器中获取原始 TCP 套接字,顺便说一句,当它是一个“有趣”的项目时,你为什么在这里问,去谷歌学习吧!
  • 目的是什么?编写恶意软件来发送垃圾邮件?
  • 不,只需提供一种无需信任中间服务器或安装第三方应用程序即可发送电子邮件的方法。如果您从服务器下载文件,它将是一个可以在本地运行的图形电子邮件 (SMTP) 客户端。正如我在问题中所解释的那样,这也有助于绕过某些大小限制。
  • 另外,我已经有了DNS请求的想法,但是建立会话并不像你想象的那么简单:用户可能选择使用SMTP服务器IP地址(可以是v4或v6 ) 如果它没有公共 DNS 记录。许多服务器使用 IP 白名单来授权连接。会话中还可以随时附加多种错误消息(服务器没有义务随时返回 250 响应)。
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 2011-11-08
  • 2013-08-28
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
相关资源
最近更新 更多