我对SendGrid电子邮件API发出POST请求时遇到问题。
提交表单以进行POST请求时,在控制台中出现以下错误:
Failed to load https://api.sendgrid.com/v3/mail/send: Response to preflight
request doesn't pass access control check: The 'Access-Control-Allow-Origin'
header has a value 'https://sendgrid.api-docs.io' that is not equal to the
supplied origin. Origin 'https://example.com/' is therefore not
allowed access.
这是我的要求:
$.ajax({
method: "POST",
url: 'https://api.sendgrid.com/v3/mail/send',
headers: {
'Authorization':'bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'Content-Type':'application/json'
},
data: {
"personalizations": [
{
"to": [
{
"email": "example@email.com"
}
],
"subject": 'Contact form submission - example.com'
}
],
"from": {
"email": sender
},
"content": [
{
"type": "text/plain",
"value": content
}
]
}
});
当我将以下行添加到数据中时:
dataType: 'jsonp',
错误消息更改为以下内容:
GET https://api.sendgrid.com/alongurl 405 (Method Not Allowed)
我不确定将控制台设置为POST时,为什么控制台发出get请求。我不确定为什么会这样。希望有人能指出我正确的方向。谢谢。
答案 0 :(得分:1)
由于CORS,您不能通过浏览器向发送网格API发送请求。可能有很多原因,但是SendGrid doc explains exactly why并建议您创建一个Web服务器来代替发送请求
上述链接的一个原因
当您有一个仅浏览器的应用程序可以访问API时,必须将API密钥嵌入该应用程序中。有权访问仅浏览器的应用程序的任何人都可以访问所有Javascript源代码,包括您的API密钥。
以及从链接中执行此操作的建议方法
您可以创建基于服务器的应用程序,以保护您的API密钥不被发布。可以实现NodeJS,PHP,Ruby,Python,C#,Go和Java等语言,以从锁定的服务器环境的安全性对API进行调用。