2015-03-20 22 views
8

sto lavorando per rendere una chiamata AJAX che ha colpito il Mailgun API per inviare e-mail. La documentazione su Mailgun dice che le richieste di posta dovrebbero essere fatte a "https://api.mailgun.net/v3/domain.com/messages". Ho incluso la mia chiave API come specificato da mailgun (loro insegnano a usare un nome utente di 'API'). Poiché ciò coinvolge CORS, non riesco a superare l'errore: campo dell'intestazione della richiesta L'autorizzazione non è consentita da Access-Control-Allow-Headers.funzione AJAX w/Mailgun, ottenendo "errore di richiesta campo di intestazione di autorizzazione non è consentita da Access-Control-Allow-Headers"

Tuttavia, ho ispezionato le richieste/risposte nella scheda Rete e "Access-Control-Allow-Origin" nella risposta da Mailgun è impostato su "*" ... che dovrebbe indicare che dovrebbe consentirlo ? (Vedi richiesta/risposta di seguito): Ho modificato il dominio effettivo e la mia chiave API.

Remote Address:104.130.177.23:443 
Request URL:https://api.mailgun.net/v3/domain.com/messages 
Request Method:OPTIONS 
Status Code:200 OK 
Request Headersview source 
Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, authorization 
Access-Control-Request-Method:POST 
Connection:keep-alive 
Host:api.mailgun.net 
Origin:null 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36 
Response Headersview source 
Access-Control-Allow-Headers:Content-Type, x-requested-with 
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Origin:* 
Access-Control-Max-Age:600 
Allow:POST, OPTIONS 
Connection:keep-alive 
Content-Length:0 
Content-Type:text/html; charset=utf-8 
Date:Fri, 20 Mar 2015 19:47:29 GMT 
Server:nginx/1.7.9 

Il mio codice per la chiamata AJAX è al di sotto, in cui includo le mie credenziali nelle intestazioni e il dominio a cui si suppone che il post per andare. Non sei sicuro di cosa stia causando questo a non funzionare. È perché sto testando l'host locale? Non pensavo che avrebbe fatto la differenza poiché "Access Control Allow Origin: *" nell'intestazione della risposta. Qualsiasi aiuto sarebbe molto apprezzato! Grazie.

function initiateConfirmationEmail(formObj){ 

    var mailgunURL; 
    mailgunURL = "https://api.mailgun.net/v3/domain.com/messages" 
    var auth = btoa('api:MYAPIKEYHERE'); 

    $.ajax({ 
    type  : 'POST', 
    cache : false, 
    headers: {"Authorization": "Basic " + auth}, 
    url  : mailgunURL, 
    data  : {"from": "emailhere", "to": "recipient", etc}, 
    success : function(data) { 
     somefunctionhere(); 
    }, 
    error : function(data) { 
     console.log('Silent failure.'); 
    } 
    }); 
    return false; 
} 
+0

Potrebbe essere necessario aggiungere 'Access-Control-Allow-Headers: AUTORIZZAZIONE per l'errore. – Drazisil

+0

@Drazisil grazie per la risposta, ma non ho bisogno di avere accesso ai server di mailgun per essere in grado di farlo (dal momento che è una richiesta da localhost a mailgun)? dove dovrei aggiungere questo? – DanielleCS

+0

Le mie scuse, stavo pensando che quelle erano le intestazioni delle richieste. Penso che il problema potrebbe essere che si sta tentando di passare l'autenticazione di base a tutti, che è normalmente ciò che la chiave API è per. Non lo vedo in https://documentation.mailgun.com/api-sending.html#examples, posso rimandare a qualcuno che conosce l'API. – Drazisil

risposta

-1

Drazisil è corretto sopra. La risposta deve includere Access-Control-Allow-Headers: Authorization come si è compreso che il colpo di testa nella richiesta e Authorization non è un simple header.