【问题标题】:Sending email from Chrome extension从 Chrome 扩展程序发送电子邮件
【发布时间】:2014-08-28 19:53:58
【问题描述】:

我不希望用户必须执行或确认任何操作,因为这会破坏总体思路。换句话说,mailto 是不可能的。

是否可以通过 JavaScript 从 Chrome 扩展程序在客户端发送电子邮件,而不会破坏用户体验或添加任何 JavaScript 扩展程序?如果有怎么办?

我觉得这将是不可能的。

我了解到有一个可用的 chrome.sockets.tcp API,知道怎么用吗?

【问题讨论】:

  • 不可能。
  • @warspyking:证明某事是不可能的很难实现。缺乏显示如何做到这一点的答案将是您唯一的证明。
  • 您不能直接使用 javascript 发送电子邮件。 @minitech 是对的。 但是,您可以使用 Ajax 将请求(静默)发送到您的服务器,然后服务器可以发送电子邮件。
  • @warspyking 投反对票,因为您的问题没有显示任何研究工作。
  • 允许 JavaScript 执行此操作的浏览器称为“垃圾邮件问题”。不允许 JavaScript 执行此操作并且仍然可能的浏览器称为“可利用”。这算不算证据?

标签: javascript email google-chrome-extension


【解决方案1】:

要发送电子邮件,程序需要通过 TCP 连接到 SMTP 服务器并根据SMTP protocol 与其通信。

  1. 无法直接使用 JavaScript / HTML5 API 发送电子邮件。

浏览器不公开直接与 TCP 套接字通信的能力。

虽然原则上您可以启动到任何端口的连接,但浏览器会“说话”而不是“说话”SMTP。它可以做 HTTP,它可以做 WebSockets,但不是你想要的协议。

  1. 无法直接从 Chrome 扩展程序发送电子邮件。

虽然 Chrome extension APIs 增强了 Web API 提供的功能,但它们仍然没有为您提供与服务器“对话”的机会。

  1. 直接从 Chrome 应用程序发送电子邮件是可能的,但并不容易。

Chrome Apps APIs 与扩展不同,但更重要的是,它们包括通过chrome.sockets.tcp API 对 TCP 套接字的原始访问。

请注意“原始访问”一词。您必须使用 JavaScript 从头开始​​实现自己的邮件客户端。 This 可能是一个起点。

根据您想要实现的目标,Chrome 应用可能是一种可接受的解决方案。或者,如果您同时需要扩展程序 API 和应用程序 API,您可以创建两者并在它们之间传递消息。

  1. Native Messaging host 一切皆有可能。

基本上是一个原生应用程序,您可以从原生主机应用程序执行任何操作。然后,Chrome 扩展程序/应用程序将能够使用必要的数据调用它。

但是,如果您决定发布扩展,这将限制您的部署选项;您将不得不担心可移植性,并且无法将本机主机上传到Web Store;你需要一个单独的安装程序。

您的消息传递主机仍需要实现您自己的 SMTP 客户端,尽管您可以选择更广泛的现成库。

  1. 使用外部 API 一切皆有可能,但保护通信安全将是一项挑战。

如果您的扩展程序可以与之通信的网站可以代表您发送电子邮件,您可以让您的扩展程序触发这样的 API。

但是,将特定于扩展的秘密隐藏在扩展中以限制 API 的使用实际上是不可能的。

您可以让用户使用一些凭据登录到此类服务,然后将这些用户特定的凭据存储在已安装的实例中,例如OAuth 令牌。这基本上将问题转移到您必须控制(或与之达成协议)的 Web 服务。

更多阅读,这里是Apps vs Extensions 指南。

【讨论】:

  • +1 可以很好地回答这个问题。但同样值得重申的是,由于无论做什么都将与服务器通信,因此使用 ajax 与服务器通信会更简单,无论是您自己的还是第三方电子邮件 API 服务,如 Mandrill,建议通过问题的 cmets 之一。
  • 嗯,这个答案在本质上似乎是悲观的。我认为 OP 想知道chrome.identity.sendEmail 或类似的东西......这样的功能将使用 AJAX 向 Google 云服务器发送消息,而该云服务器将处理电子邮件......
【解决方案2】:

我找到了一种从我的 Chrome 扩展程序发送电子邮件的简单方法(尽管请参阅下面的一个重要警告):

  • 在 ifttt.com 上,使用“Webhooks”服务创建一个小程序。
  • 选择“接收网络请求”作为触发器,然后选择一个事件名称(下面的$EVENT_NAME)。
  • “那么”选择“Gmail”服务,并使用“发送电子邮件”进行操作。
  • 使用{{VALUE1}} 作为“收件人地址”。
  • 在主题和正文中的任意位置使用 {{VALUE2}}{{VALUE3}}(您将从 Chrome 扩展程序传递的值)。
  • 转到ifttt.com/maker_webhooks 并单击“文档”以获取您的密钥($KEY 下方)。
  • 让您的 Chrome 扩展程序向 https://maker.ifttt.com/trigger/$EVENT_NAME/with/key/$KEY?value1=$TARGET_EMAIL_ADDRESS&value2=$SOME_OTHER_VALUE&value3=$SOME_OTHER_VALUE 发出请求(确保对每个值都调用 encodeURIComponent)。

这有一个非常严重的问题:任何人都可以发现该 URL(通过查看您的 Chrome 扩展程序代码)并使用它使用您的模板发送电子邮件。 (在我的情况下,我只将我的扩展发布到了一个受信任的组。)也许你可以在代码中对 URL 进行足够的混淆,这样不容易发现,但我不知道如何实际制作它安全。

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 2012-08-18
    • 2011-01-05
    • 2022-11-20
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2012-03-19
    • 2020-02-26
    相关资源
    最近更新 更多