【问题标题】:Sending an email from the browser using js使用js从浏览器发送邮件
【发布时间】:2016-10-05 04:48:37
【问题描述】:

我创建了一个简单的联系表格,允许用户在我的网站上输入他们的姓名、电子邮件和短信(使用firebase hosting 运行)。

当他们点击submit 时,我想生成一封电子邮件并从他们那里发送给我自己(即 from 和/或 reply-to 将是电子邮件他们输入的地址)包含他们的消息。

我知道从浏览器中执行此操作存在一些限制,原因有很多。我也知道这可以使用mailto 链接和电子邮件中预先填充的额外信息来实现,但我也不想使用这种方法。

相反,我想知道是否有任何方法可以在浏览器中实现这一切?我的想法是向另一个服务(不属于我自己)发出POST 请求,然后按照描述发送电子邮件。有没有人对这种类型的要求有任何经验?

注意:我目前使用firebase 托管,因为它对静态内容是免费的。我研究了我是否可以运行express 服务器并使用nodemailer 之类的东西,但是我认为我最终会付钱在某个地方运行它,这似乎有点矫枉过正,因为我不希望发送每月超过 25-50 封电子邮件。

【问题讨论】:

  • 浏览器不是邮件客户端,因此您必须代理发送邮件。
  • “全部来自浏览器?我的想法是向另一个服务发出 POST 请求......然后它会发送电子邮件” - 事实上“硬”部分不会在浏览器中完成。

标签: javascript email reactjs redux-form


【解决方案1】:

2019 年更新

EmailJS(免费增值)

现在可以使用 SaaS 产品 EmailJS。他们充当您和电子邮件提供商之间的中间人,确保 API 密钥不向公众公开。

从他们的主页:

不需要服务器

我们提供开箱即用的服务,让您无需服务器端代码即可发送电子邮件。

SmtpJs(免费)

this answer 中概述了替代解决方案。请确保不要将您的 SMTP 凭据泄露到网络上。

原答案

TL;DR 不要在客户端做。这就是后端的用途。

您不能只通过浏览器发送电子邮件,因为浏览器不像邮件客户端那样构建。没有邮件服务器可以使用。

您需要从您的服务器或第三方提供商发送电子邮件。

SendGrid 是此类提供程序的一个示例,它们提供了一个 RESTful API,就像您正在寻找的那样。 See how to send an email in the API docs.

SendGrid 不是您唯一的选择。 Here is a comparison of different transactional email providers

但是存在安全风险:如果您的客户从他们的浏览器调用 API,那么您将向他们公开您的 API 密钥。任何开发人员都可以轻松地使用此 API 密钥从您的 SendGrid 帐户发送电子邮件。那不是你想要的。最好在您的后端执行此操作。不想花钱买服务器?没问题,有免费托管。如果这是您后端的唯一功能,那么免费提供就足够了。

【讨论】:

  • 所以绝对没有办法在 firebase 上执行此操作,因为 Firebase 不允许在其服务器上使用动态资源,如果您在客户端执行此操作,则会公开您的 api 密钥,因此不安全。
【解决方案2】:

我相信这可能已经回答了herehere

这两种方法都使用用户的邮件客户端,但如果不使用使用 Express of AJAX 的服务器端方法,我认为没有任何方法可以纯粹在 javascript 中做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-05
    • 2021-11-28
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多