Mailgun + AngularJS + Http Post 请求身份验证

3

我试图将下面这段样例代码转换为Angular请求。

https://documentation.mailgun.com/user_manual.html#sending-via-api

curl -s --user 'api:YOUR_API_KEY' \
    https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
    -F from='Excited User <mailgun@YOUR_DOMAIN_NAME>' \
    -F to=YOU@YOUR_DOMAIN_NAME \
    -F to=bar@example.com \
    -F subject='Hello' \
    -F text='Testing some Mailgun awesomness!'

我已经尝试使用带有授权头的下面代码,但仍然返回未经授权的错误。我看到请求头中已经设置了带有值的授权字段。
我做错了什么?

    var url = "https://api.mailgun.net/v3/sandboxXXXXXXXXXXXXXXXXX.mailgun.org/messages";
    var dataFields = {
        to: "verified recepient",
        subject: "subject",
        text: "text",
        from: "postmaster address of sandbox domain"
    }

    var req = {
        method : 'POST',
        url: url,
        headers : {
            'Authorization' : 'Basic api:key-XXXXXXXXXXXXXXXX'
        },
        data: dataFields
    }
    $http(req).then(function(data){
        console.log(data);
    }, function(data){
        console.log(data);
    })
2个回答

6

最终从本地机器上使它工作了 - 从不同的帖子中收集信息并使用这个插件 - https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi - 我成功地让它工作。那么这个插件是做什么的?我可以在我的POST请求中这样做吗?

如果没有这个插件,它会给我一个错误。

XMLHttpRequest cannot load https://api.mailgun.net/v3/sandboxXXXXXXXXXX.mailgun.org/messages. Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response.

var url = "https://api.mailgun.net/v3/sandboxXXXXXXXXXXXXXXX.mailgun.org/messages";
        var dataJSON = {
            from: "postmaster@sandboxXXXXXXXXXXXXXXX.mailgun.org",
            to: "registered recepient",
            subject: "Subject text",
            text: "Body text",
            multipart: true
        }

        var req = {
            method : 'POST',
            url: url,
            headers : {
                'content-type': 'application/x-www-form-urlencoded',
                'Authorization': 'Basic ' + $base64.encode('api:key-XXXXXXXXXXXXX')
            },
            transformRequest: function(obj) {
                var str = [];
                for(var p in obj)
                str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
                return str.join("&");
            },
            data: dataJSON
        }
        $http(req).then(function(data){
            console.log(data);
        }, function(data){
            console.log(data);
        })
  • 我遗漏了一些东西。
  • 多部分
  • 上下文类型
  • encodedURIComponent - 用于参数
  • base64编码的API密钥

0
尝试在您的头请求中添加以下内容: username: 'api', password: 'yourapikey'

变量 req = { 方法:'POST', URL:url, 用户名:"api", 密码:"API key", 数据:dataFields } - kevinSpaceyIsKeyserSöze

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