用Nuxt槽Sendgrid发送邮件

时间:2018-11-30 14:13:46

标签: sendgrid nuxt

我有一个简单的vuetify联系人表格,我想通过电子邮件发送此表格。 我尝试使用method发送电子邮件,但由于它在客户端,因此无法正常工作。所以我遇到了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

1 个答案:

答案 0 :(得分: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 / mail”之类的路径,发送电子邮件。

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