我有一个简单的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
答案 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触发来发送电子邮件。