2015-03-20 45 views
8

Pracuję nad utworzeniem wywołania AJAX, które uderza w API Mailgun, aby wysłać wiadomość e-mail. Dokumentacja na Mailgunie mówi, że żądania pocztowe powinny być wysyłane na "https://api.mailgun.net/v3/domain.com/messages". Podałem mój klucz API zgodnie z ustawieniem mailgun (polecają użyć nazwy użytkownika "api"). Ponieważ dotyczy to CORS, nie mogę pominąć błędu: Pole nagłówka żądania Autoryzacja nie jest dozwolona przez Access-Control-Allow-Headers.Funkcja AJAX w/Mailgun, uzyskanie "pola nagłówka żądania błędu Autoryzacja jest niedozwolona przez Access-Control-Allow-Headers"

Sprawdziłem jednak żądania/odpowiedzi na karcie Sieć, a "Kontrola dostępu-Pozwól-Origin" w odpowiedzi z programu Mailgun ustawiono na "*" ... co powinno wskazywać, że powinno to zezwalać ? (Zobacz żądanie/odpowiedź poniżej): Edytowałem rzeczywistą domenę i mój klucz 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 

Mój kod do wywołania AJAX jest poniżej, w którym to moje poświadczenia w nagłówkach i domenę, gdy placówka ma iść. Nie wiesz, dlaczego to nie działa. Czy to dlatego, że testuję na hoście lokalnym? Nie sądziłem, że to by miało znaczenie, ponieważ "Access Control Allow Origin: *" w nagłówku odpowiedzi. Każda pomoc będzie bardzo ceniona! Dziękuję Ci.

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

Może być konieczne dodanie opcji "Access-Control-Allow-Headers: Authorization" dla błędu. – Drazisil

+0

@Drazisil dziękuję za odpowiedź, ale czy nie muszę mieć dostępu do serwerów pocztowych, aby móc to zrobić (skoro jest to żądanie od lokalnego hosta do skrzynki pocztowej)? gdzie mam to dodać? – DanielleCS

+0

Moje przeprosiny, myślałem, że to były nagłówki zapytań. Myślę, że problem może polegać na tym, że próbujesz w ogóle przejść podstawowe uwierzytelnianie, to zwykle jest klucz API. Nie widzę tego w https://documentation.mailgun.com/api-sending.html#examples, mogę odroczyć komuś, kto zna API. – Drazisil

Odpowiedz

-1

Drazisil ma poprawne położenie powyżej. Odpowiedź musi zawierać Access-Control-Allow-Headers: Authorization, ponieważ nagłówek ten jest uwzględniany w żądaniu, a Authorization nie jest simple header.