‫Instruktur: Setelah bagian pengunggahan file
‫dari bagian selesai,
‫sekarang mari kita mengalihkan perhatian kita untuk mengirim email.
‫Dan kami sebenarnya sudah mengirim email
‫sebelumnya, untuk pengaturan ulang kata sandi, tetapi dalam beberapa kuliah berikutnya
‫kami akan membawanya ke tingkat yang sama sekali baru.
‫Dan yang akan kita lakukan adalah membuat
‫template email dengan pug dan mengirim email
‫asli menggunakan layanan SendGrid.
‫Dan sekarang di kuliah pertama ini,
‫kita akan membuat penangan email yang lebih kuat
‫dari yang kita miliki sebelumnya.
‫Jadi, mari kita buka folder utilitas kita,
‫dan kemudian di sini, ingat, kita sudah memiliki file email.
‫Tetapi saat ini
‫yang kami miliki hanyalah penangan pengiriman email yang sangat
‫sederhana, yang tidak dapat menerima banyak opsi.
‫Jadi sekarang kita akan
‫membangun solusi yang jauh lebih kuat di sini.
‫Baiklah?
‫Jadi yang akan saya lakukan adalah membuat kelas,
‫dan kelas itu akan disebut email.
‫Jadi modul. ekspor, dan
‫begitu juga kelas ini yang
‫akan kita ekspor dari file ini.
‫Dan seperti biasa, sebuah kelas membutuhkan fungsi konstruktor, yang
‫pada dasarnya adalah fungsi yang akan
‫dijalankan ketika objek baru dibuat melalui kelas ini.
‫Sekarang mari kita lihat
‫bagaimana kita akan menggunakan kelas ini dalam praktik.
‫Jadi idenya, pada dasarnya,
‫setiap kali kita ingin mengirim email
‫baru, adalah mengimpor kelas email ini dan kemudian menggunakannya seperti ini.
‫Jadi membuat email baru,
‫dan kemudian ke dalamnya, kami ingin menempelkan
‫pengguna, dan pengguna itu akan berisi alamat
‫email, dan juga nama jika kami ingin mempersonalisasi email.
‫Dan juga URL.
‫Dan contoh yang bagus
‫untuk yang ini misalnya, URL reset untuk mengatur ulang kata sandi.
‫Oke?
‫Jadi, objek email baru, dan kemudian di
‫sana kita ingin memanggil metode yang
‫sebenarnya akan mengirim email.
‫Jadi, katakanlah sendWelcome.
‫Dan itu akan dikirim setiap
‫kali pengguna baru mendaftar untuk aplikasi kita.
‫Baiklah?
‫Kami kemudian juga akan mengirim reset kata sandi.
‫Dan cara kami mengatur semua
‫ini akan membuatnya sangat mudah untuk kemudian terus
‫menambahkan metode baru dan baru yang serupa dengan yang
‫ini untuk mengirim email yang berbeda untuk skenario yang berbeda.
‫Baiklah?
‫Bagaimanapun, karena kita menempelkan pengguna dan URL
‫ke email baru, maka konstruktor kita perlu mengambil
‫ini sebagai argumen.
‫Jadi pengguna dan URL.
‫Dan apa yang terjadi di konstruktor ini adalah ini. untuk akan
‫sama dengan pengguna. email Kemudian kami
‫juga ingin menentukan nama depan pengguna,
‫sekali lagi untuk mempersonalisasi email.
‫Dan itulah pengguna. name dan mari
‫kita pisahkan dan ambil hanya elemen pertama dalam array yang dihasilkan.
‫Jadi kami melakukan
‫ini sebelumnya, tetapi kemudian juga ini. url sama dengan URL yang masuk.
‫Akhirnya, mari kita juga mengatur ini. dari sini.
‫jadi pada dasarnya di tingkat objek.
‫Jadi setiap objek yang dibuat dari kelas
‫ini akan mendapatkan properti ini.
‫Jadi yang ini akan mirip dengan yang kita miliki di sini.
‫Jadi pada dasarnya ini dari, jadi
‫mari kita salin tapi
‫bagus untuk memilikinya di satu tempat sentral seperti ini.
‫Sekarang satu hal yang benar-benar ingin
‫saya lakukan, pada dasarnya adalah mendefinisikan alamat email
‫ini di sini
‫sebagai variabel konfigurasi, dan variabel lingkungan
‫yang dapat kita ubah dengan
‫sangat mudah dengan memanipulasi konfigurasi. berkas env.
‫Baiklah?
‫Jadi, sebut saja ini EMAIL_FROM.
‫Dan kemudian kami hanya menginginkan alamat email itu sendiri.
‫Baiklah?
‫Jadi kasus lain di mana sangat membantu
‫untuk menggunakan variabel lingkungan.
‫Dan sekarang mari kita buat ini menjadi string template.
‫Dan tentu saja pasang itu di sini.
‫Jadi itu proses. lingkungan EMAIL_FROM.
‫Selanjutnya, mari kita buat metode di
‫sini untuk membuat transport.
‫Jadi mirip dengan apa yang kita miliki di sini.
‫Jadi buatTransport.
‫Dan sekarang di sini kami sebenarnya ingin memiliki transportasi
‫yang berbeda apakah kami sedang berproduksi atau tidak.
‫Jadi ketika kita
‫dalam produksi, kita sebenarnya ingin mengirim
‫email yang sebenarnya, dan kita akan melakukannya nanti menggunakan
‫SendGrid, tetapi jika kita tidak dalam produksi
‫maka kita masih ingin menggunakan aplikasi Mailtrap kita seperti
‫yang kita lakukan sebelumnya ketika kami mengirim email.
‫Jadi, alih-alih email masuk ke alamat email asli, email tersebut
‫akan masuk ke kotak masuk Mailtrap kami sehingga kami
‫dapat benar-benar melihatnya
‫dalam proses pengembangan kami.
‫Jadi transporter itu akan persis sama dengan yang ini, jadi mari kita
‫salin tetapi pertama-tama katakanlah if(process.
‫lingkungan NODE_ENV).
‫Jadi, ingat, begitulah cara kami memeriksa apakah
‫kami sedang berproduksi atau tidak.
‫Jadi jika itu sedang dalam
‫produksi, dan jika
‫kita sedang dalam produksi, maka kita ingin membuat transporter untuk SendGrid.
‫Jadi mari kita taruh itu di sini, dan
‫sekali lagi kita akan melakukannya nanti.
‫Untuk saat ini mari kita kembalikan sesuatu dari sini.
‫Tidak masalah, katakanlah satu.
‫Baiklah?
‫Dan pada dasarnya jika tidak, kami
‫ingin mengembalikan nodemailer ini. buatTransportasi.
‫Oke?
‫Jadi Transport
‫ini di sini pada dasarnya akan mengembalikan transport nodemailer baru seperti ini.
‫Atau, sebaliknya ketika kita sedang
‫berproduksi, maka yang akan ada di sini.
‫Oke?
‫Jadi mari kita benar-benar menghapusnya dari sini.
‫Juga, kami ingin menghapus yang ini.
‫Dan sekarang mari kita buat metode send.
‫Jadi ini akan menjadi metode
‫yang akan melakukan pengiriman yang sebenarnya.
‫Oke?
‫Dan yang ini akan menerima template dan subjek.
‫Dan Anda akan mengerti
‫sedikit lebih baik mengapa begitu seluruh kelas ini selesai.
‫Oke?
‫Jadi template dan subjek.
‫Jadi mari kita beri komentar di sini tentang apa yang akan dilakukan ini.
‫Dan sekarang sebelum kita benar-benar menulis fungsi ini, izinkan
‫saya menunjukkan kepada Anda bagaimana kita
‫akan menggunakannya, dan mengapa kita membutuhkan template dan subjek di sini.
‫Jadi, ingat bagaimana kami
‫mengatakan di sini bahwa kami akan memiliki satu metode
‫yang disebut sendWelcome, dan juga seperti metode untuk mengirim email reset password.
‫Jadi, sekarang mari kita tambahkan itu di sini, jadi sendWelcome.
‫Dan yang ini tidak menerima argumen apa pun
‫dan yang dilakukannya hanyalah memanggil kirim dengan templat
‫dan subjek yang
‫kita inginkan untuk email ini.
‫Oke?
‫Dan sekali lagi, ini membuatnya sangat mudah untuk
‫kemudian membuat email yang
‫berbeda untuk semua jenis situasi yang berbeda.
‫Oke?
‫Jadi kami memiliki fungsi pengiriman satu rute ini
‫di sini dan kemudian semua yang lebih
‫spesifik ini, yang kemudian akan memanggil fungsi pengiriman router
‫yang melakukan pekerjaan sebenarnya.
‫Oke?
‫Dan sebenarnya ini dia. send karena tentu
‫saja metode ini di sini,
‫mereka akan didefinisikan pada objek saat ini.
‫Dan jadi itulah ini.
‫Kemudian di sini kita paste di nama template.
‫Dan nama template yang saya taruh di
‫sini, nantinya akan menjadi template pug yang
‫akan kita buat.
‫Jadi, sebenarnya di kuliah berikutnya, kita
‫akan membuat template pug ini untuk
‫mengirim email selamat datang.
‫Oke?
‫Dan kemudian hanya baris subjek.
‫Katakanlah 'Selamat datang di Keluarga Natours! ' Jadi, seperti
‫ini, kami tidak perlu khawatir tentang detail
‫implementasi apa pun saat
‫kami benar-benar mengirim email.
‫Jadi misalnya di titik kode
‫kita di mana kita ingin mengirim
‫email selamat datang kita tidak perlu khawatir
‫tentang nama template atau tentang baris subjek.
‫Yang akan kita lakukan hanyalah mengatakan kirim email selamat datang
‫dan hanya itu.
‫Dan kemudian
‫kelas kami akan menangani implementasinya.
‫Baiklah?
‫Bagaimanapun, sekarang mari kita membangun fungsi send ini.
‫Jadi, apa yang akan kita lakukan dalam
‫fungsi ini, pertama-tama adalah membuat HTML untuk email berdasarkan
‫template pug.
‫Jadi pada dasarnya yang
‫kita tempelkan di sini dengan template.
‫Kemudian, tentukan opsi email, dan sekali
‫lagi akan sangat mirip dengan yang ini, dan sebenarnya biarkan
‫saya melanjutkan dan
‫memotongnya dari sini dan menempelkannya di sini.
‫Oke?
‫Tentu saja tidak akan sama persis, tetapi
‫kita akan meninggalkannya sebentar lagi.
‫Baiklah?
‫Dan
‫akhirnya, Buat transportasi dan kirim email.
‫Oke?
‫Dan begitulah, saya akan meninggalkan yang itu untuk nanti juga.
‫Jadi, dimulai dengan poin nomor satu.
‫Dan biasanya sampai saat ini, kita hanya menggunakan
‫pug untuk membuat
‫template, dan kemudian kita meneruskan nama
‫template ke fungsi render pada respon.
‫Benar.
‫Jadi kami selalu menggunakannya seperti
‫res ini. render,
‫lalu di sini nama templatenya.
‫Benar?
‫Dan fungsi render ini di balik
‫layar pada dasarnya adalah membuat HTML berdasarkan template pug
‫dan kemudian mengirimkannya ke klien.
‫Sekarang dalam hal ini kita tidak benar-benar ingin
‫merender, yang ingin kita lakukan pada dasarnya adalah membuat
‫HTML dari template sehingga kita dapat mengirim HTML itu
‫sebagai email.
‫Jadi pada dasarnya mendefinisikannya di sini sebagai opsi HTML ke
‫dalam opsi email ini.
‫Oke?
‫Jadi, ingat bagaimana kita bisa menentukan teks dan HTML.
‫Dan terutama kami tertarik untuk mengirim email HTML.
‫Dan itulah mengapa kita akan memiliki template pug
‫dari mana kita akan menghasilkan HTML ini.
‫Oke?
‫Jadi itu tidak akan bekerja seperti ini,
‫tetapi sebaliknya kita benar-benar membutuhkan paket
‫pug di sini.
‫Jadi,
‫pug seperti ini, dan
‫kemudian kita perlu menggunakan pug.
‫renderFile.
‫Oke?
‫Jadi ini akan mengambil
‫file dan kemudian membuat kode pug menjadi HTML asli.
‫Oke?
‫Dan agar selanjutnya bisa kita simpan ke dalam variabel HTML.
‫Baiklah?
‫Jadi, di mana file itu?
‫Nah, itu di dirname, jadi nama
‫D-I-R, yang diingat adalah
‫lokasi skrip
‫yang sedang berjalan,
‫dan begitulah, sekarang, di folder utilitas ini.
‫Oke?
‫Jadi dari sana kita perlu naik satu langkah, lalu
‫masuk ke tampilan, dan dari sana masuk ke folder email yang juga akan
‫kita buat dalam hitungan detik.
‫Dan kemudian
‫di sanalah kita akan memiliki file template.
‫Jadi templat}.
‫pesek
‫Jadi untuk email selamat datang, template ini akan
‫disebut selamat datang.
‫Jadi sekarang mari kita benar-benar membuatnya di sini di tampilan, buat folder
‫baru, email, dan
‫kemudian di sana file baru, selamat
‫datang. pesek
‫Oke?
‫Dan kami tidak akan benar-benar membuat template
‫ini dalam video ini, tetapi saya hanya ingin menunjukkan kepada
‫Anda bagaimana semua ini akan bekerja.
‫Oke?
‫Jadi sambutan ini akan ditempelkan di sini
‫ke dalam template dan kemudian akan mengambil file itu dari folder views.
‫Benar?
‫Jadi, itu adalah langkah pertama.
‫Selanjutnya, mari kita tentukan opsi email.
‫Jadi, dari sekarang ini. dari.
‫Ingat?
‫Jadi di sini.
‫Selanjutnya,
‫kita memiliki ini. to, dan kami juga memiliki
‫subjek yang sama dengan subjek yang datang di sini, jadi, yah,
‫sebenarnya kami bahkan tidak perlu mendefinisikan yang ini dan
‫kami memiliki HTML kami.
‫Jadi seperti ini, atau tentu saja,
‫itu bahkan tidak perlu karena namanya sama.
‫Sekarang, selanjutnya, kami juga ingin memasukkan versi teks dari
‫email kami ke dalam email.
‫Oke?
‫Dan itu sebenarnya sangat penting karena lebih
‫baik untuk tingkat pengiriman email dan juga untuk folder spam.
‫Baiklah?
‫Dan juga beberapa orang lebih suka email teks sederhana
‫daripada email HTML yang lebih berformat.
‫Baiklah?
‫Jadi pada dasarnya, kita membutuhkan cara untuk
‫mengubah semua HTML menjadi teks sederhana.
‫Jadi menghapus semua HTML hanya menyisakan konten.
‫Dan untuk melakukan itu,
‫kita
‫akan menginstal paket lain, dan yang ini disebut html-to-text.
‫Baiklah?
‫Mari kita sertakan itu di
‫sini, ToText.
‫membutuhkan('html-ke-teks'), seperti ini.
‫Oke?
‫Sekarang mari kita gunakan itu untuk mengonversi HTML kita.
‫Jadi kami menggunakan htmlToText. fromString dan kemudian
‫string itu disimpan dalam HTML.
‫Benar?
‫Jadi, ini adalah opsi email kami, Dan
‫sebenarnya saya lupa sesuatu yang sangat, sangat penting, di
‫langkah pertama ini, jadi dalam file render ini, karena
‫sama seperti dengan respons. render, kita juga
‫bisa menempelkan data ke file render.
‫Dan tentunya itu sangat penting
‫jika kita ingin benar-benar melakukan personalisasi atau email
‫dengan nama dan juga paste di URL.
‫Jadi mari kita lakukan seperti yang biasa kita lakukan
‫di fungsi render.
‫Jadi itu firstName, kirimkan ke ini. firstName, dan URL-nya
‫adalah ini. url, dan juga mari kita tempel
‫di subjek dan Anda akan melihat
‫nanti mengapa kita membutuhkannya.
‫Oke?
‫Jadi, sekarang mari kita akhirnya membuat transport
‫menggunakan fungsi create transport kita,
‫dan kemudian mengirim email.
‫Jadi, cukup adil, itu saja. buatTransportasi.
‫Jadi, ingat bahwa ini hanya metode ini di sini, yang ini, dan memiliki
‫nama yang sama persis
‫dengan fungsi ini yang berasal dari nodemailer.
‫Jadi itu agak
‫membingungkan, jadi sebut saja newTransport di sini.
‫Oke, jadi ini juga newTransport, jadi
‫agak kurang membingungkan.
‫Baiklah?
‫Sekarang mari kita ingat bagaimana kita melakukannya di sini sebelumnya.
‫Jadi kami memiliki
‫transporter kami, yang kami buat secara
‫terpisah dalam kasus ini, dan kemudian kami merantai sendMail dengan opsi.
‫Jadi mari kita ambil itu di sini, hapus semua kode yang tersisa.
‫Jadi pada dasarnya letakkan di sini sebagai referensi.
‫Oke?
‫Jadi transporter ini sekarang ini.
‫Baiklah?
‫Dan selanjutnya, kami berantai mengirim email dan kemudian dengan
‫opsi email yang kami definisikan di sini.
‫Kemudian, kita perlu menunggu semua
‫ini, karena, tentu saja, ini adalah fungsi asinkron.
‫Jadi sekarang mari kita tandai yang ini di sini sebagai async.
‫Oke?
‫Jadi sekarang, kita juga perlu menunggu fungsinya di sini.
‫Baiklah?
‫Karena ini. send sekarang memang merupakan fungsi async.
‫Jadi di sini kami menunggu agar fungsi ini hanya kembali
‫segera setelah email benar-benar dikirim.
‫Jadi, tentu saja, tandai ini sebagai async juga.
‫Luar biasa.
‫Itu sebenarnya untuk kelas ini.
‫Jadi kita tidak lagi membutuhkan contoh ini.
‫Oke?
‫Jadi di video berikutnya, kita akan benar-benar
‫melanjutkan dan menggunakan kelas baru ini untuk mengirim email selamat datang.
‫Jadi, cepat rekap apa yang kami lakukan di sini.
‫Jadi kami membuat kelas email baru
‫dari mana kami dapat membuat objek email
‫yang kemudian dapat kami gunakan untuk mengirim email yang sebenarnya.
‫Dan untuk membuat objek email baru, kita akan menempelkan pengguna dan
‫juga URL yang kita inginkan di email tersebut.
‫Jadi di sini kami menetapkan semua hal itu ke objek
‫saat ini, dan juga beberapa pengaturan
‫lain yang ingin kami sediakan, seperti nama depan dan email pengirim.
‫Jadi pada dasarnya untuk mengabstraksikan informasi
‫ini dari fungsi send,
‫dan memiliki semuanya di satu tempat terpusat.
‫Kemudian kami memiliki fungsi transportasi baru yang
‫membuatnya sangat mudah untuk membuat transportasi yang berbeda
‫untuk lingkungan yang berbeda.
‫Dan sekali lagi, mengabstraksikan logika itu
‫dari fungsi kirim yang
‫sebenarnya yang seharusnya hanya berkaitan dengan pengiriman email.
‫Oke?
‫Jadi inilah fungsi send yang mengambil template dan
‫subjek, dan berdasarkan itu ia membuat HTML dari template pug
‫yang kemudian akan diatur ke dalam
‫opsi email, yang akan, di
‫akhir fungsi, lalu akhirnya dikirim dalam baris
‫kode ini.
‫Oke?
‫Tapi itu tidak akan menjadi fungsi kirim yang
‫akan kita gunakan dalam kode kita.
‫Jadi sebagai gantinya, kita akan membuat
‫satu fungsi berbeda untuk setiap jenis email yang
‫ingin kita kirim.
‫Dan yang pertama saya buat di sini adalah sendWelcome.
‫Baiklah?
‫Jadi untuk sendWelcome, pada dasarnya kita mengatur
‫nama template sebagai
‫selamat datang, dan subjek sebagai string ini.
‫Oke?
‫Jadi, saya harap itu masuk akal, dan saya melihat Anda sebentar lagi.