2016-08-02 72 views
1

Ich versuche, eine Mailgun mail service in einer ionischen App zu setzen. Hier ist der Code: Controller:Ionic http CORS gleichen Ursprung nicht erlaubt

$http({ 
         "method": "POST", 
         "url": "https://api.mailgun.net/v3/" + mailgunUrl + "/messages", 
         //"crossDomain": "true", 
         "headers": { 
          "Access-Control-Allow-Origin": "*",//"http://localhost:8100", 
          "Access-Control-Allow-Headers": "content-type, accept", 
          //"Access-Control-Allow-Credentials": "true", 
          "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE", 
          "Content-Type": "application/x-www-form-urlencoded", 
          'Authorization' : 'Basic '+ mailgunApiKey 
          //"Authorization": "Basic " + mailgunApiKey//$base64.encode('api:key-'+mailgunApiKey) 
         }, 
         data: "from=" + "[email protected]" + "&to=" + $scope.datapopup.mail + "&subject=" + "Guestlist" + "&text=" 

config.xml

<content src="main.html"/> 
    <access origin="*"/> 
    <plugin name="cordova-plugin-whitelist" version="1"/> 
    <plugin name="cordova-plugin-crop" spec="~0.1.0"/> 
    <allow-navigation href="*" /> 
    <allow-intent href="*"/> 
    <allow-intent href="http://*/*"/> 
    <allow-intent href="https://*/*"/> 
    <allow-intent href="tel:*"/> 
    <allow-intent href="sms:*"/> 
    <allow-intent href="mailto:*"/> 
    <allow-intent href="geo:*"/> 

Ich erhalte die status '0' error und die Protokolle zeigen, dass CORS (Cross-Origin Anfrage) nicht erlaubt ist, Zutrittskontroll ermöglichen Kopfzeilen fehlen (übersetzt aus dem Französischen).

Ein anderer Fehler von Chrome ist 'Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.'.

Ich versuchte auch von Android-Gerät, aber funktioniert nicht. Irgendeine Idee?

Antwort

1

Fügen Sie diese

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> 

und fügen cordova-plugin-whitelist Plugin, um Ihre Anwendung index.html.


Für die Zwecke der Entwicklung Sie CORS plugin für Chrome verwenden können.


Ihr Controller kann so aussehen:

.controller("EmailCtrl", function($scope, $http) { 

    var mailgunUrl = "YOUR_DOMAIN_HERE"; 
    var mailgunApiKey = window.btoa("api:key-YOUR_API_KEY_HERE") 

    $scope.recipient = "[email protected]"; 

    $scope.send = function(recipient, subject, message) { 
     $http(
      { 
       "method": "POST", 
       "url": "https://api.mailgun.net/v3/" + mailgunUrl + "/messages", 
       "headers": { 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Authorization": "Basic " + mailgunApiKey 
       }, 
       data: "from=" + "[email protected]" + "&to=" + recipient + "&subject=" + subject + "&text=" + message 
      } 
     ).then(function(success) { 
      console.log("SUCCESS " + JSON.stringify(success)); 
     }, function(error) { 
      console.log("ERROR " + JSON.stringify(error)); 
     }); 
    } 

}) 
+1

schon versucht, was Sie gesagt haben. Es funktioniert nicht – ai20

+0

Ich sehe, Sie haben eine Lösung gefunden :). Ich habe vor ein paar Monaten einen Blogpost über Mailgun und Ionic geschrieben, also weiß ich, dass es funktionieren muss. @NightSkyCode? –

+0

Warum downvotes https://postimg.cc/image/h6yuq3ir5/ für 4 meiner Antworten? Für die Antwort oben kann immer noch verstanden werden, aber nicht für meine anderen Antworten. Der erste Kommentar von NightSkyCode handelt davon, dass jemand ein Idiot ist. Deshalb habe ich bei seinem Spitznamen ein Fragezeichen gesetzt, weil nicht klar war, auf wen er sich bezog. Ass Ich kann Konto für NightSkyCode sehen http://StackOverflow.com/users/1530143/Nightskycode ist gesperrt "Dieses Konto wurde vorübergehend deaktiviert, um sich abzukühlen. Die Aussetzungsfrist endet am 1. September um 15:41 Uhr." –

0

Die Antwort ist sehr einfach:

wenn Sie android aus ionischen laufen sollten Sie keine optionalen Parameter verwenden: ionische Lauf android