MEAN Stack - Mongoose, obsługa poczty elektornicznej

Podobne dokumenty
Express.js i własne API - pomoc do lab02

MEAN Stack - Node.js, express

Spis treści 1. Założenia ogólne 2. Wymagania 3. Typy SMSów 4. Statusy SMSów 5. Wysyłanie SMSów - Web API 6. Wysyłanie SMSów - 7.

DOKUMENTACJA TECHNICZNA SMS API MT

IIIIIIIIIIIIIIIMMIMMIII

Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

Bezpieczeństwo poczty elektronicznej

Dokumentacja smsapi wersja 1.4

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Funkcje dodatkowe. Wersja 1.2.1

Funkcje dodatkowe. Wersja 1.2.1

Instrukcja korzystania z usługi 2SMS. Wersja 2.0 [12 stycznia 2014] bramka@gsmservice.pl

Instrukcja konfigurowania poczty Exchange dla klienta pocztowego użytkowanego poza siecią uczelnianą SGH.

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Aktualizacja SMSFall v Data publikacji:

Sesje i logowanie. 1. Wprowadzenie

INSTRUKCJA OBSŁUGI Wersja: 2.5

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Modele danych walidacja widoki zorientowane na model

Lab5 - Badanie protokołów pocztowych

Informacje które należy zebrać przed rozpoczęciem instalacji RelayFax.

Wykład 5: PHP: praca z bazą danych MySQL

Kurier DPD dla Subiekt GT

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Bazy Danych i Usługi Sieciowe

SMS Kod Automatyczny

Konfiguracja poczty IMO dla urządzeń mobilnych z systemem ios oraz Android.

Sieci komputerowe i bazy danych

SZYBKI START. Tworzenie nowego połączenia w celu zaszyfrowania/odszyfrowania danych lub tekstu 2. Szyfrowanie/odszyfrowanie danych 4

Konfiguracja programu pocztowego Mozilla Thunderbird do pracy w sieci NEO.pl

Zakładanie konta

PHP: bazy danych, SQL, AJAX i JSON

Konfiguracja programu MS Outlook 2007 dla poczty w hostingu Sprint Data Center

Konfiguracja poczty IMO w programach Microsoft Outlook oraz Mozilla Thunderbird

Podstawowe wykorzystanie Hibernate

ZAKŁADANIE POCZTY ELEKTRONICZNEJ - na przykładzie serwisu

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Dokumentacja REST API v 3.0. Kraków, 7 marca FreshMail, ul. Fabryczna 20a, Kraków tel , freshmail.

Smarty PHP. Leksykon kieszonkowy

INSTRUKCJA OBSŁUGI Wersja: 1.8

Funkcje backendu konfiguratora. Warszawa,

INSTRUKCJA OBSŁUGI KLIENTA POCZTY WWW

Manual konfiguracji konta dla fax2mail

Wprowadzenie do Doctrine ORM

TRX API opis funkcji interfejsu

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Komunikator internetowy w C#

INSTRUKCJA KONFIGURACJI KLIENTA POCZTOWEGO

Pomoc dla usługi GMSTHostService. GMSTHostService. Pomoc do programu 1/14

REFERAT O PRACY DYPLOMOWEJ

Moduł integrujący serwis Korporacji Kurierskiej z programem WF-MAG Instrukcja użytkowania

Konfiguracja konta pocztowego w Thunderbird

Instrukcja instalacji v2.0 Easy Service Manager

Teoretyczne wprowadzenie do programu pocztowego Microsoft Outlook 2007

Duszpasterstwo Akademickie Petra. Podręcznik administratora newslettera html

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

Specyfikacja techniczna. mprofi Interfejs API

Podstawy programowania III WYKŁAD 2

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Wstęp INFORMATOR TECHNICZNY WONDERWARE. Wysyłanie wiadomości z programu Wonderware Historian. 1. Aktywowanie Database Mail

Manual konfiguracji konta dla fax2mail

Internetowy serwis Era mail Aplikacja sieci Web

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Instrukcja laboratoryjna

(wersja robocza) Spis treści:

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Instrukcja obsługi programu DHL EasySHip v. 5.3.x

Przewodnik... Budowanie listy Odbiorców

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

Instrukcja konfiguracji funkcji skanowania

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Artur.Kalinowski@fuw.edu.

Budowanie listy Odbiorców

Zarządzanie kontami użytkowników w i uprawnieniami

Krótka instrukcja instalacji

Komponent Formularz. Rys. 1. Strona programu Joomla - Rys. 2. Instalacja komponentu

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Specyfikacja HTTP API. Wersja 1.6

INSTRUKCJA UŻYTKOWNIKA Repozytorium Dokumentów Elektronicznych KS-EDE ISO 9001:2008 Dokument: Wydanie:

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Instalacja oprogramowania Rigel Med-eBase dla systemów Windows XP, 7 oraz 8.

Autor: Joanna Karwowska

Część 3 - Konfiguracja

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

Dokumentacja interfejsu MySQL. Platforma BSMS.PL Instrukcja podłączenia po przez mysql

Klient poczty elektronicznej - Thunderbird

Dokumentacja REST API v 3.0

Mediatel 4B Sp. z o.o., ul. Bitwy Warszawskiej 1920 r. 7A, Warszawa,

Java wybrane technologie

MEAN Stack - uwierzytelnienie

HermesEX. Dokumentacja serwisowa v

Zakładanie konta w serwisie

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

wfirma (Moduł Magento) v Strona 1 z 12

1 Moduł Konfigurowanie Modułu

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Internetowe bazy danych

Dokumentacja panelu Klienta

Transkrypt:

EAN Stack - Mongoose, obsługa poczty elektornicznej 1/38 MEAN Stack - Mongoose, obsługa poczty elektornicznej Tworzenie serwisów Web 2.0 dr inż. Robert Perliński rperlinski@icis.pcz.pl Politechnika Częstochowska Instytut Informatyki Teoretycznej i Stosowanej 25 marca 2017

MEAN Stack - Mongoose, obsługa poczty elektornicznej 2/38 Plan prezentacji 1 Biblioteka mongoose API dla kolekcji użytkowników 2 Obsługa poczty elektornicznej 3 Źródła

MEAN Stack - Mongoose, obsługa poczty elektornicznej 3/38 Biblioteka mongoose Mongoose: http://mongoosejs.com/ biblioteka dla Node.js udostępniająca mapowanie obiektowe (podobne do ORM) z interfejsem znanym z Node.js, opiera się na Object Data Mapping (ODM) - zmiana danych z bazy do obiektów JavaScript, którch można użyć w aplikacji, dostarcza gotowe rozwiązanie do modelowania danych aplikacji, zawiera wbudowane rzutowanie typów, walidację, budowanie zapytań, gotowe, praktyczne rozwiązania dla logiki biznesowej i wiele innych.

EAN Stack - Mongoose, obsługa poczty elektornicznej 4/38 Schemat Wszystko w Mongoose zaczyna się od schematu. Każdy schemat przekłada się na kolekcje w MongoDB, określa budowę i zawartość dokumentów w tej kolekcji. Przykład: var mongoose = require('mongoose'); var Schema = mongoose.schema; var blogschema = new Schema({ title: String, author: String, body: String, comments: [{ body: String, date: Date }], date: { type: Date, default: Date.now }, hidden: Boolean, meta: { votes: Number, favs: Number }

MEAN Stack - Mongoose, obsługa poczty elektornicznej 5/38 Schemat Każdy klucz schematu określa pole dokumentu w bazie i typ tego pola. W ten sposób można również definiować zagnieżdżone obiekty dokumentu. Możliwe jest dodanie pól do schematu już po jego utworzeniu (Schema.add()). Dozwolone typy danych: String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array. Schematy określają/definiują też: nasze własne metody dla modelu (opróczy tych wbudowanych), statyczne metody dla modelu, dodatkowe i złożone indeksy utworzone dla kolekcji. Do schematów można też dodawać wirtualne pola, które np. będą zwracać napis z kilku pól ale samo pole wirtualne nie będzie odzwierciedlone w bazie.

MEAN Stack - Mongoose, obsługa poczty elektornicznej 6/38 Model Modele są specjalnymi konstruktorami tworzonymi na bazie schematu. Instancje modelu reprezentują dokumenty, które mogą być odczytane i zapisane do bazy. Wszystkie operacje na dokumentach w bazie są wykonywane za pośrednictwem modelu. Konstruktor ma dwa parametry: liczbę pojedynczą nazwy kolekcji, w której będą dane, schemat, na bazie którego powstanie model, var schema = new mongoose.schema({ name: 'string', size: 'string' var Tank = mongoose.model('tank', schema); pozyższy kod stworzy w bazie kolekcję tanks. na modelu można robić chyba wszystko: pobierać, tworzyć, usuwać, aktulizować,...

MEAN Stack - Mongoose, obsługa poczty elektornicznej 7/38 Instalacja, połączenie, schemat i model Instalujemy mongoose w projekcie: npm i mongoose --save Dołączamy mongoose do projektu i łączymy się z bazą danych, np. test (zostanie utworzona jeśli takiej nie było): var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); Sprawdzamy czy połączenie się udało: var db = mongoose.connection; db.on('error', console.error.bind(console, 'błąd połączenia...')); db.once('open', function() { // połączenie udane! Schemat i model: var friendschema = mongoose.schema({ nazwa: String var Friend = mongoose.model('friend', friendschema);

MEAN Stack - Mongoose, obsługa poczty elektornicznej 8/38 Tworzenie dokumentów, własna metoda i jej użycie Na bazie modelu tworzymy dokumenty (zawierają pola i typy jak w schemacie): var franek = new Friend({ nazwa: 'Franek' console.log(franek.nazwa); // 'Franek' Przyjaciele mogą się witać - zobaczmy, jak dodać funkcjonalność do naszych dokumentów: // metody należy dodać do schematu ZANIM utworzy się z niego model friendschema.methods.sayhello = function () { var powitanie = this.nazwa? "Cześć, mam na imię " + this.nazwa : "Witaj, nie wiem jak się nazywam..."; console.log(powitanie); } Funkcja dodana do pola methods schematu i wykorzystana w modelu jest dostępna w każdym utworzonym dokumencie var jola = new Friend({ nazwa: 'Jolanta' jola.sayhello(); // "Cześć, mam na imię Jolanta"

MEAN Stack - Mongoose, obsługa poczty elektornicznej 9/38 Operacje wykonywane na modelu I Wybrane metody wykonywane na modelu: increment() - zwiększa o jeden wersję dokumentu, model(name) - zwraca dodatkową instancję modelu, remove([fn]) - usuwa bieżący dokument z bazy danych, save(...) - zapisuje bieżący dokument w bazie, count(conditions, [callback]) - zwraca liczbę dopasowanych dokumentów, create(doc(s), [callback]) - skrót dla wygodniejszego tworzenia dokumentów, wykonuje: new MyModel(doc).save() dla każdego dokumentu w docs, deletemany(conditions, [callback]) - usuwa wszystkie dopasowane dokumenty, deleteone(conditions, [callback]) - usuwa pierwszy dopasowany dokument,

MEAN Stack - Mongoose, obsługa poczty elektornicznej 10/38 Operacje wykonywane na modelu II Wybrane metody wykonywane na modelu: find(conditions, [projection], [options], [callback]) - zwraca dokumenty spełniające kryterium, findbyid(id, [projection], [options], [callback]) - zwraca jeden dokument o podanym id, niemal równoznaczne z findone({ _id: id }), findbyidandremove(id, [options], [callback]) - usuwa dokument o podanym id, findbyidandupdate(id, [update], [options], [callback]) - aktualizuje dokuemnt o podanym id, findone([conditions], [projection], [options], [callback]) - zwraca pierwszy dokument spełniający kryterium, findoneandremove(conditions, [options], [callback]) - usuwa pierwszy dopasowany dokument, findoneandupdate([conditions], [update], [options], [callback]) - aktualizuje pierwszy dopasowany dokument,

MEAN Stack - Mongoose, obsługa poczty elektornicznej 11/38 Operacje wykonywane na modelu III Wybrane metody wykonywane na modelu: insertmany(doc(s), [options], [callback]) - sprawdza poprawność dokumentów (docs) i jeśli są poprawne dodaje je wszystkie do bazy w jednym zapytaniu, remove(conditions, [callback]) - usuwa dokument(y) spełniający kryterium, replaceone(conditions, doc, [options], [callback]) - zastępuje dokument spełniający kryterium, różni się od update() tym, że nie pozwala na operatory atomowe, np. $set, update(conditions, doc, [options], [callback]) - aktualizuje dokumenty spełniające kryterium, updateone(conditions, doc, [options], [callback]) - aktualizuje pierwszy dokument spełniający kryterium, atrybuty modelu: db, collection, schema - zwraca: połączenie, kolekcję czy schemat, z którego korzysta model.

MEAN Stack - Mongoose, obsługa poczty elektornicznej 12/38 Przykłady wbudowanych metod Zapis dokumentów w bazie, metoda save(): jola.save(function (err, jola) { // pierwszy argument odpowiada za błędy if (err) return console.error(err); jola.sayhello(); Odczyt dokumentów zapisanych w bazie, metoda find(): Friend.find(function (err, przyjaciele) { if (err) return console.error(err); for(var i=0; i<przyjaciele.length; i++) { console.log('%s', przyjaciele[i].nazwa); } }) Wyszukiwanie można wykonać po dowolnym polu: find({ nazwa: /ˆJol/ } Friend.find({ nazwa: /^Jol/ }, function (err, przyjaciele) { if (err) return console.error(err); console.log("====================\n"); for(var i=0; i<przyjaciele.length; i++) { console.log('%s', przyjaciele[i].nazwa); } // lista przyjaciół nazywających sie Jol*

MEAN Stack - Mongoose, obsługa poczty elektornicznej 13/38 API dla kolekcji użytkowników Adresy dostępne w API i ich znaczenie: Adres (URI) Metoda działanie /users GET lista wszystkich uzytkowników /users/:id GET użytkownik o podanym ID /users POST dodanie użytkownika do kolekcji /users/:id PUT aktualizacja danych użytkownika o padanym ID /users/delete-all DELETE usunięcie wszystkich użytkowników z kolekcji /users/:id DELETE usunięcie użytkownika o padanym ID Z głównego pliku aplikacji, app.js, interesuje nas: app.js var users = require('./routes/users');... app.use(bodyparser.json()); app.use(bodyparser.urlencoded({ extended: false }));... app.use('/users', users);

MEAN Stack - Mongoose, obsługa poczty elektornicznej 14/38 Przygotowanie, połączenie z bazą, schemat i model Przygotowanie mongoose, połączenie z bazą, schemat i model: routes/users.js var mongoose = require('mongoose');... // wszystkie dane będą w kolekcji users bazy ob-tur mongoose.connect('mongodb://localhost/ob-tur', function(err) { if(err) { console.log('błąd połączenia', err); } else { console.log('połączenie udane'); } var UsersSchema = new mongoose.schema({ username: String, password: String, admin: { type: Boolean, default: false } var Users = mongoose.model('users', UsersSchema);...

EAN Stack - Mongoose, obsługa poczty elektornicznej 15/38 Pobieranie danych, metoda GET Pobieranie całej kolekcji: routes/users.js /* GET /users */ router.get('/', function(req, res, next) { Users.find(function (err, docs) { if (err) return next(err); res.json(docs); Pobieranie wybranego użytkownika: routes/users.js /* GET /users/:id */ router.get('/:id', function(req, res, next) { Users.findById(req.params.id, function (err, doc) { if (err) return next(err); res.json(doc);

EAN Stack - Mongoose, obsługa poczty elektornicznej 16/38 Dodawanie i aktualizacja danych, metody POST i PUT Dodawanie nowego dokumentu do kolekcji: routes/users.js /* POST /users */ router.post('/', function(req, res, next) { Users.create(req.body, function (err, doc) { if (err) return next(err); // console.log(json.stringify(doc)); res.json(doc); Aktualizacja wybranego użytkownika: routes/users.js /* PUT /users/:id */ router.put('/:id', function(req, res, next) { Users.findByIdAndUpdate(req.params.id, req.body, function (err, doc) { if (err) return next(err); res.json(doc);

MEAN Stack - Mongoose, obsługa poczty elektornicznej 17/38 Dodawanie i aktualizacja danych, metody POST i PUT Dodawanie użytkownika: Aktualizacja użytkownika o podanym ID:

EAN Stack - Mongoose, obsługa poczty elektornicznej 18/38 Usuwanie danych z kolekcji, metoda DELETE Usuwanie wszystkich dokumentów z kolekcji: routes/users.js /* DELETE /users/delete-all */ router.delete('/delete-all', function(req, res, next) { Users.remove({}, function (err, writeres) { if (err) return next(err); // console.log(writeres); res.send(writeres); Usuwanie wybranego użytkownika z kolekcji: routes/users.js /* DELETE /users/:id */ router.delete('/:id', function(req, res, next) { Users.findByIdAndRemove(req.params.id, function (err, doc) { if (err) return next(err); res.json(doc);

MEAN Stack - Mongoose, obsługa poczty elektornicznej 19/38 Usuwanie danych, metoda DELETE Usuwanie użytkownika o podanym ID: Usuwanie wszystkich dokumentów z kolekcji:

MEAN Stack - Mongoose, obsługa poczty elektornicznej 20/38 Zwiększanie wersji dokumentu, metoda PATCH Zwiększanie wersji dokumentu użytkownika o podanym ID: routes/users.js /* PATCH /users/:id */ router.patch('/:id', function(req, res, next) { Users.findById(req.params.id, function (err, doc) { if (err) return next(err); doc.increment(); doc.save(function (err, saveddoc) { if (err) return next(err); res.json(saveddoc);

MEAN Stack - Mongoose, obsługa poczty elektornicznej 21/38 Biblioteki obsługujące pocztę elektroniczną w Node.js Biblioteki obsługujące pocztę elektroniczną w Node.js: Nodemailer - https://nodemailer.com - najlpesza, najbardziej rozbudowana, jeden z nielicznych, który ma inną dokumentację niż na npmjs.com czy github.com, express-mailer - https://www.npmjs.com/package/express-mailer express-mail - https://www.npmjs.com/package/express-mail mail - https://www.npmjs.com/package/mail mail2 - https://www.npmjs.com/package/mail2 === mailcomposer - https://www.npmjs.com/package/mailcomposer, nie pozwala na wysyłanie maili tylko na ich komponowanie i wysyłanie do otwartego już kanału SMTP czy do pliku mailparser - https://www.npmjs.com/package/mailparser, do parsowania maili, nawet bardzo dużych i w dużych ilościach...

MEAN Stack - Mongoose, obsługa poczty elektornicznej 22/38 Biblioteka Nodemailer O bibliotece Nodemailer: https://nodemailer.com proste wysyłanie maili (ang. easy as cake - proste jak bułka z masłem :) ), projekt rozpoczął się przed rokiem 2010 kiedy nie było jakiejś sensownej biblioteki to wysyłania poczty, dzisiaj Nodemailer jest niemal domyślnie wybierany do obsługi poczty elektronicznej w Node.js, obecna wersja ma numer 3+ i jest na licencji EUPL-v1.1 (European Union Public Licence, podobne do GPB v2), istnieje też płatna licencja komercyjna.

MEAN Stack - Mongoose, obsługa poczty elektornicznej 23/38 Biblioteka Nodemailer I Możliwości biblioteki Nodemailer: pojedynczy moduł bez żadnych dodatkowych zależności - kod łatwy w zarządzaniu, duży nacisk położono na bezpieczeństwo, brak takich usterek jak RCE (Remote Code Execution), wsparcie dla Unicode pozwala na użycie dowolnych znaków, również emoji, wsparcie dla Windows, wystarczy zainstalować jak dowolny inny moduł, treść wiadomości może być tekstowa albo w HTML, pozwala na dodawanie załączników, możliwość umieszczania obrazów z załącznika w treści HTML wiadomości,

MEAN Stack - Mongoose, obsługa poczty elektornicznej 24/38 Biblioteka Nodemailer II Możliwości biblioteki Nodemailer: bezpiecznie przesyłanie wiadomości dzięki TSL/STARTTLS, różne metody przesyłania danych poza domyślnym protokołem SMTP, możliwość podpisywania wiadomości kluczem DKIM (DomainKeys Identified Mail), system wtyczek do modyfikowania wiadomości, dodatkowy system autoryzacji OAuth2 korzystający z tokenów, obsługa Proxy dla połączeń SMTP, obsługa kodu ES6 - brak niezamierzonych wycieków pamięci dzięki obsłudze var. Instalacja i wymagania: instalacja: npm install nodemailer --save, Nodemailer wymaga tylko Node.js w wersji 6+, żadnych innych specyficznych wymagań.

MEAN Stack - Mongoose, obsługa poczty elektornicznej 25/38 TL;DR - czyli użycie Nodemailer w skrócie 1 Tworzymy warstwę transportową używając SMTP (domyślnie) albo jakąś inną. 2 Ustawiamy wszystkie dane odnośnie wiadomości (kto, do kogo, treść, załączniki,...). 3 Dostarczamy wiadomość używając metody sendmail() utworzonej wcześniej warstwy transportowej.

MEAN Stack - Mongoose, obsługa poczty elektornicznej 26/38 TL;DR - czyli użycie Nodemailer w skrócie 1 Tworzymy warstwę transportową używając SMTP (domyślnie) albo jakąś inną. index.js const nodemailer = require('nodemailer'); // tworzy obiekt warstwy transportowej, domyślnie używa protokołu SMTP let transporter = nodemailer.createtransport({ service: 'gmail', auth: { user: 'rperlinski.pcz@gmail.com', pass: 'SuperMegaTajneHaslo' }

MEAN Stack - Mongoose, obsługa poczty elektornicznej 27/38 TL;DR - czyli użycie Nodemailer w skrócie 2 Ustawiamy wszystkie dane odnośnie wiadomości (kto, do kogo, treść, załączniki,...). index.js // wysyła wiadomości, dane mogą byc w unicode let mailoptions = { // adres nadawcy from: "Robert Perliński" <rperlinski.pcz@gmail.com>, // lista odbiorców to: pierwszy.adres@gmail.com, rperlinski@icis.pcz.pl, // temat wiadomości subject: Testowa wiadomość, // treść wiadomości tekstowej text: Treść wiadomości jako czysty tekst, // treść wiadomości w html html: <b>treść wiadomości w HTML</b> <p>jakieś znaki w unicode, grecki alfabet: α, β, γ,...</p> };

MEAN Stack - Mongoose, obsługa poczty elektornicznej 28/38 TL;DR - czyli użycie Nodemailer w skrócie 3 Dostarczamy wiadomość używając metody sendmail() utworzonej wcześniej warstwy transportowej. index.js router.get('/send-email', function(req, res, next) { // wysyła maila dla ustawionej warstwy transportowej dla danych opcji transporter.sendmail(mailoptions, (error, info) => { if (error) { return console.log(error); } console.log('wiadomość %s wysłana: %s', info.messageid, info.response); res.send('wiadomość ' + info.messageid + ' wysłana: ' + info.response); Wiadomość <51c06368-d687-ef1a-5785-c581e9db0a36@gmail.com> wysłana: 250 2.0.0 OK 1490142828 a16sm3936955lfk.24 - gsmtp

MEAN Stack - Mongoose, obsługa poczty elektornicznej 29/38 Odebrany mail Odebrany mail w formie HTML: Odebrany mail w formie tekstowej

MEAN Stack - Mongoose, obsługa poczty elektornicznej 30/38 Używanie gmail a Gmail a może działać od razu albo może wymagać dodatkowych ustawień: Gmail oczekuje prawdziwego użytkownika, nie robota; wykorzystuje wiele różne heurystyki aby zapobiec logowaniu przez roboty, Gmail ma opcję less secure; https://support.google.com/accounts/answer/6010255?hl=pl, która pozwala na dostęp każdemu kto tylko zna hasło, może być potrzeba również wypełnienie kodu weryfikacyjnego (Captcha) zanim będziemy mogli wysyłać maile: https://accounts.google.com/b/0/displayunlockcaptcha Gmail zastępuje też zawsze nadawcę wiadomości danymi uwierzytelnionego użytkownika, w celu uniknięcia problemów z logowanie należy użyć autoryzacji przez token (OAuth2) albo innego dostawcy.

MEAN Stack - Mongoose, obsługa poczty elektornicznej 31/38 Używanie gmail a - wyłączenie less secure Opcję less secure można ustawić tutaj: https://www.google.com/settings/security/lesssecureapps

MEAN Stack - Mongoose, obsługa poczty elektornicznej 32/38 Używanie gmail a - wyłączenie less secure Opcja less secure w koncie google: W informacji o naszym koncie wybieramy Logowanie się i zabezpieczenia: Opcja na samym dole:

MEAN Stack - Mongoose, obsługa poczty elektornicznej 33/38 Treść maila generowana z szablonu Tworzymy szablon zawierający oczekiwaną treść maila, np. mailbody.pug. Renderujemy szablon i na jego zawartości wywołujemy funkcję, w której wyślemy maila. Wysyłamy maila zastępując treść wiadomości danymi zrenderowanymi z szablonu. views/mailbody.pug h3 Informacje p Dziękujemy za utworzenie konta na naszej stronie. Poniżej znajdziesz link aktywacyjny do twojego konta. h4 Aktywacja konta p Link aktywacyjny: a(href=activationlink)= activationlink p Your App Team 2017

MEAN Stack - Mongoose, obsługa poczty elektornicznej 34/38 Mail aktywacyjny - wysyłanie maila z szablonu routes/index.js router.get('/send-email2', function(req, res, next) { var al = 'http://myapp.com/activate/36899d041ce8968435625b52b0ea827b5f08d645'; res.render('mailbody', {activationlink: al}, function(err, body){ mailoptions.html = body; mailoptions.subject = 'Account activation'; console.log(body); transporter.sendmail(mailoptions, (error, info) => { if (error) { return console.log(error); } console.log('wiadomość %s wysłana: %s', info.messageid, info.response); res.send('wiadomość ' + info.messageid + ' wysłana: ' + info.response); Wiadomość <126d04e2-6356-c356-71e2-19c0c7607983@gmail.com> wysłana: 250 2.0.0 OK 1490148792 193sm3899286ljj.4 - gsmtp

MEAN Stack - Mongoose, obsługa poczty elektornicznej 35/38 Mail aktywacyjny - wynik Treść maila: <h3>informacje</h3> <p>dziękujemy za utworzenie konta na naszej stronie. Poniżej znajdziesz link aktywacyjny do twojego konta. </p> <h4>aktywacja konta</h4> <p>link aktywacyjny: <a href="http://myapp.com/activate/36899d041ce8968435625b52b0ea827b5f08d645"> http://myapp.com/activate/36899d041ce8968435625b52b0ea827b5f08d645</a> </p> <p>your App Team 2017</p> Mail:

MEAN Stack - Mongoose, obsługa poczty elektornicznej 36/38 Przydkład dla innej poczty - warstwa transportowa Darmowa poczta elektroniczna ze strony t.pl Przygotowanie warstwy transportowej: // Serwer poczty przychodzącej: POP3, t.pl STARTTLS // Serwer poczty wychodzącej: SMTP, t.pl, bez szyfrowania // Nazwa użytkownika web20 let selfsignedconfig = { host: 't.pl', port: 465, secure: true, // użwa TLS auth: { user: 'web20@t.pl', pass: '*******' }, tls: { // nie przerywa przy błędnym certyfikacie rejectunauthorized: false } }; let transporter2 = nodemailer.createtransport(selfsignedconfig);

MEAN Stack - Mongoose, obsługa poczty elektornicznej 37/38 Przydkład dla innej poczty - wysyłanie Wysyłanie wiadomości: router.get( /send-email3, function(req, res, next) { let mailoptions = { from: "Student Web 2.0" <web20@t.pl>, // adres nadawcy to: asdf@asdf.com, jkowalski@icis.pcz.pl, // lista odbiorców subject: Testowa wiadomość, // temat wiadomości text: Treść wiadomości jako czysty tekst, // treść wiadomości tekstowej // treść w HTML html: <b>treść wiadomości jak HTML</b> <p>jakieś znaki w unicode, grecki alfabet: α, β, γ,...</p> }; // wysyła maila dla ustawionej warstwy transportowej dla danych opcji transporter2.sendmail(mailoptions, (error, info) => { if (error) { return console.log(error); } console.log( Wiadomość %s wysłana: %s, info.messageid, info.response); res.send( Wiadomość + info.messageid + wysłana: + info.response);

MEAN Stack - Mongoose, obsługa poczty elektornicznej 38/38 Źródła http://mongoosejs.com/ https://nodemailer.com https://blog.ragingflame.co.za/2012/6/28/ simple-form-handling-with-express-and-nodemailer http: //www.ryanray.me/sending-emails-with-jade-node-js-and-nodemailer