使用JS从浏览器发送电子邮件

7
我在我的网站上创建了一个简单的联系表格,允许用户输入他们的姓名、电子邮件和文本信息(使用firebase hosting运行)。
当他们点击“提交”时,我想从他们那里生成一封电子邮件并将其发送给我(即“发件人”和/或“回复地址”将是他们输入的电子邮件地址),其中包含他们的消息。
我知道由于许多不同原因,无法在浏览器内部执行此操作存在限制。我也知道可以使用预填充有额外信息的mailto链接来实现这一点,但我也不想使用这种方法。
相反,我想知道是否有任何方法可以完全在浏览器内部完成这个过程?我的想法是向另一个服务(不是我自己拥有的)进行POST请求,然后按照描述发送电子邮件。有没有人有这种类型需求的经验?
注意:我目前使用firebase进行托管,因为它对于静态内容是免费的。我查看了是否可以运行express服务器并利用类似nodemailer的东西,但我认为我最终会为其付费,这似乎有点过度杀伤性,因为我不希望每月发送超过25-50封电子邮件。

浏览器不是邮件客户端,所以您将需要代理发送邮件。 - Ryan
“全部在浏览器内完成?我想的是通过向另一个服务发送POST请求来发送电子邮件”- 因此,实际上,“困难”的部分不会在浏览器内完成。” - nnnnnn
3个回答

8

2019更新

EmailJS (Freemium)

现在可以使用软件即服务产品EmailJS实现此功能。他们作为您和电子邮件提供商之间的中间人,确保API密钥不会公开。

从他们的主页上看:

无需服务器

我们提供开箱即用的服务,允许您发送没有服务器端代码的电子邮件。

SmtpJs (免费)

另一种解决方案在这个答案中概述。请确保不要向网络泄露您的SMTP凭据。

原始回答

简短来说,不要在客户端进行此操作。这就是后端的作用。

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

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

这样的提供商例子是SendGrid,他们提供类似于您正在寻找的RESTful API。请参阅API文档中如何发送电子邮件

SendGrid并不是您唯一的选择。这里是不同事务性电子邮件提供商的比较

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


所以在Firebase上绝对无法做到这一点,因为Firebase不允许在其服务器上使用动态资源,如果您在客户端上执行此操作,则会暴露您的API密钥,因此不安全。 - Sushant Bhargav

2

我相信这个问题可能已经在这里或者这里解决了?

这两种方法都使用用户的邮件客户端,但是如果不使用Express或AJAX等服务器端方法,我认为没有办法纯粹地使用JavaScript实现。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接