1

我有一个简单的 vuetify 联系表格,我想通过电子邮件发送此表格。我曾尝试使用 amethod发送电子邮件,但它不起作用,因为它在客户端。所以我遇到了 CORS 问题。

这是我的代码:

async send() {
  if (this.$refs.form.validate()) {
    try {
      const sgMail = require("@sendgrid/mail");
      sgMail.setApiKey(process.env.SENDGRID_API_KEY);
      const msg = {
        to: "test@example.com",
        from: "me@mydomain.com",
        subject: "Sending with SendGrid is Fun",
        text: "and easy to do anywhere, even with Node.js",
        html: "<strong>and easy to do anywhere, even with Node.js</strong>"
      };
      sgMail.send(msg);
    }
  }
}

是否需要 Express(或其他后端)?有没有办法使用中间件让它工作?

编辑

显然,这是不可能的:https ://github.com/sendgrid/sendgrid-nodejs/issues/730

4

1 回答 1

1

Sendgrid 的 CORS 策略不允许您从浏览器使用他们的 API(“Access-Control-Allow-Origin”标头的值为“ https://sendgrid.api-docs.io)。

引自https://sendgrid.com/docs/for-developers/sending-email/cors/

在 SendGrid 的案例中,我们不允许我们的客户对我们的 v3/mail/send 端点进行基于浏览器的调用。(...) 您可以创建一个基于服务器的应用程序,这将保护您的 API 密钥不被公开。可以实现 NodeJS、PHP、Ruby、Python、C#、Go 和 Java 等语言,以便从锁定的服务器环境的安全性中调用 API。

您必须从服务器发送电子邮件,这是一件好事,因为否则您的 API 密钥将被浏览器公开。

如果您在 SSR 模式下使用 Nuxt(运行 Node),我想您可以创建一个“服务器中间件”(https://nuxtjs.org/api/configuration-servermiddleware),例如使用类似“/api/”的路径邮件”,这将发送电子邮件。

如果您使用nuxt-generate创建静态站点,您可以使用“功能即服务”,例如“ https://webtask.io/ ”,创建一个小节点脚本;您可以通过客户端的 url 触发发送电子邮件。

于 2018-11-30T15:55:13.423 回答