2017-06-06 1 views
0

Je travaille sur localhost (dans une application Web statique React) et sur le formulaire de soumission, je veux envoyer un email via mon formulaire de contact. Donc, je signale au api mailgun comme ceci:Envoyer du courrier via api mailgun en utilisant uniquement la requête ajax côté client

axios({ 
     url: 'https://api:[email protected]/v3/somesandboxdomain1c.mailgun.org/messages', 
     method: 'post', 
     username: 'api', 
     password: 'key-somekey', 
     data: { 
     from: "Excited User <[email protected]>", 
     to: "[email protected]", 
     subject: "Hello from react app", 
     text: "Testing some Mailgun awesomness!" 
     }, 
     headers: { 
     "Content-Type": "application/x-www-form-urlencoded", 
     'Authorization': `Basic ${window.btoa('api:key-someapikey')}` 
     } 
    }) 
     .then(function (response) { 
     console.log(response); 
     }) 
     .catch(function (error) { 
     console.log(error); 
     }); 

Mais je continue à obtenir cette erreur ou l'un de ses variations:

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

J'utilise une application web statique et avoir aucun serveur par lequel envoyer des données Je l'ai déjà essayé d'ajouter et de retirer divers en-têtes tels que Access-Control-Allow-Headers: Authorization etc. Rien ne semble fonctionner

+0

avez-vous compris? Je pensais que vous pouviez envoyer à partir d'un serveur – timh

+0

@timh non, vous devez utiliser un serveur –

Répondre

1

Je ne sais pas si je réponds trop tard, mais vous pouvez essayer ceci:

axios({ 
    method: 'post', 
    url: `${mailgun.baseUrl}/${mailgun.domain}/messages`, 
    auth: { 
     username: 'api', 
     password: mailgun.apiKey 
    }, 
    params: { 
     from: 'Awesome Development Team <[email protected]>', 
     to: 'testi[email protected]', 
     subject: 'Hello', 
     text: 'Welcome to the team!' 
    } 
}).then(
    response => { 
     console.log(response) 
    }, 
    reject => { 
     console.log(reject) 
    } 
) 

documentation indique que Mailgun il accepte les paramètres de la demande à la place du corps de la demande, donc dans Axios, vous devez utiliser params au lieu de data.

En ce qui concerne la base Auth requis par Mailgun, Axios fournit une meilleure façon de le faire, qui fournit un objet auth (Reportez-vous au code ci-dessus)

Vous pouvez consulter ces liens pour plus de détails

Hope this helps!