Kada korisnicima vaše Ionic mobilne aplikacije želite omogućiti da vam direktno iz nje pošalju e-mail bez potrebe za pokretanjem njihovog zadanog e-mail klijenta imate dvije mogućnosti. Složiti svoj API ili koristiti API koji vam nudi Mailgun. Mailgun omogućava slanje 10 000 e-mailova mjesečno potpuno besplatno, a detalje o implementaciji možete vidjeti u nastavku blog posta i u njihovoj dokumentaciji.
Podrazumijeva se da ste prije toga postavili razvojnu okolinu, pokrenuli novi Ionic projekt i dodali podršku za Android platformu.
1 2 3 |
$ ionic start PrimjerAplikacije blank $ cd PrimjerAplikacije $ ionic platform add android |
Postavljanje kontrolera
Kontroler koji ćemo u ovom primjeru staviti u www/js/app.js
U kontroleru možete odmah definirati primatelja $scope.recipient = "tomislavstankovic@example.com"; kako ga korisnici aplikacije ne bi morali svaki put unositi. Zapravo primatelj u ovom slučaju uopće ne mora biti vidljiv jer ionako je uvijek isti, ali za potrebe ovog blog posta ću ga ostaviti vidljivog u formi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
angular.module('starter', ['ionic']) .run(function($ionicPlatform) { $ionicPlatform.ready(function() { if(window.cordova && window.cordova.plugins.Keyboard) { cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); cordova.plugins.Keyboard.disableScroll(true); } if(window.StatusBar) { StatusBar.styleDefault(); } }); }) .controller("EmailCtrl", function($scope, $http) { var mailgunUrl = "YOUR_DOMAIN_HERE"; var mailgunApiKey = window.btoa("api:key-YOUR_API_KEY_HERE") $scope.recipient = "tomislavstankovic@example.com"; $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=" + "ionic@primjeraplikacije.com" + "&to=" + recipient + "&subject=" + subject + "&text=" + message } ).then(function(success) { console.log("SUCCESS " + JSON.stringify(success)); $scope.poruka = "E-mail je uspješno poslan." }, function(error) { console.log("ERROR " + JSON.stringify(error)); $scope.poruka = "E-mail nije poslan." }); } }) |
Kako bi kontroler uopće radio ono za što je namijenjen morate postaviti varijable mailgunUrl (za potrebe testiranja možete koristiti njihovu besplatnu sandbox domenu) i mailgunApiKey. Sve to dobijete odmah nakon registracije.
Forma za slanje e-maila
Sada možete napraviti i formu za slanje.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> <title>Ionic & Mailgun</title> <link href="lib/ionic/css/ionic.css" rel="stylesheet"> <link href="css/style.css" rel="stylesheet"> <!-- ionic/angularjs js --> <script src="lib/ionic/js/ionic.bundle.js"></script> <!-- cordova script (this will be a 404 during development) --> <script src="cordova.js"></script> <!-- your app's js --> <script src="js/app.js"></script> </head> <body ng-app="starter"> <ion-pane> <ion-header-bar class="bar-stable"> <h1 class="title">Ionic & Mailgun</h1> </ion-header-bar> <ion-content ng-controller="EmailCtrl"> <div class="card"> <div class="item item-text-wrap"> <div class="list"> <label class="item item-input"> <input type="text" placeholder="Primatelj" ng-model="recipient"> </label> <label class="item item-input"> <input type="text" placeholder="Naslov" ng-model="subject"> </label> <label class="item item-input"> <textarea placeholder="Poruka" ng-model="message"></textarea> </label> </div> <button class="button button-block button-positive" ng-click="send(recipient, subject, message)"> Pošalji e-mail </button> <div class="row"> <div class="col" ng-show="poruka">{{poruka}}</div> </div> </div> </div> </ion-content> </ion-pane> </body> </html> |
Forma sada izgleda ovako. Ovisno o potrebama možete određena polja prikazati ili ukloniti.
Ako sada pokrenete aplikaciju u web pregledniku $ ionic serve ili na mobilnom uređaju $ ionic run android dobit ćete poruku o grešci.
1 |
XMLHttpRequest cannot load https://api.mailgun.net/v3/mailgunUrl/messages. Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response. |
Kako bi to zaobišli u index.html dodajte sljedeće, a možete dodati i CORS u Google Chrome.
1 |
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> |
Sada ste spremni za slanje prvog e-maila.
I to je to. Provjerite svoj inbox.
Zaključak
Ovo je samo jedan od mogućih scenarija za slanje elektroničke pošte unutar Ionic aplikacije. Prednost ovakvog načina slanja elektroničke pošte je ta što korisnici ne moraju napustiti vašu Ionic aplikaciju kako bi vam poslali e-mail.