All language subtitles for 010 Email Templates with Pug_ Welcome Emails_Downloadly.ir_en

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,070 --> 00:00:02,870 So in this video, we're gonna use 2 00:00:02,870 --> 00:00:07,100 the power of Pug to create a really nice email template 3 00:00:07,100 --> 00:00:10,893 and then send a welcome email based on that template. 4 00:00:12,680 --> 00:00:16,710 And that template is welcome.pug here. 5 00:00:16,710 --> 00:00:21,410 Okay, now just as before, I already have a template 6 00:00:21,410 --> 00:00:23,973 here in dev-data templates. 7 00:00:25,050 --> 00:00:29,240 So email template and so it's all of this code here 8 00:00:29,240 --> 00:00:32,990 with the CSS also in lined. 9 00:00:32,990 --> 00:00:34,403 So a ton of CSS. 10 00:00:36,140 --> 00:00:40,563 So let's copy all of that here into welcome.pug. 11 00:00:41,570 --> 00:00:45,200 Okay, and here up in the bottom, you'll see this note 12 00:00:45,200 --> 00:00:48,850 where I say that it actually adapted this email template 13 00:00:48,850 --> 00:00:50,053 from this one. 14 00:00:51,780 --> 00:00:53,483 So let's very quickly open that. 15 00:00:54,511 --> 00:00:55,344 All right. 16 00:00:55,344 --> 00:00:58,813 And so our email is going to look a bit like this one. 17 00:00:59,990 --> 00:01:03,590 Now, of course, I adapted the design a bit to our brand. 18 00:01:03,590 --> 00:01:05,430 So for this button here, 19 00:01:05,430 --> 00:01:07,783 I used our green color, for example. 20 00:01:09,848 --> 00:01:13,600 But kind of what I used is this HTML template. 21 00:01:16,210 --> 00:01:20,820 Then I actually converted that HTML using this tool. 22 00:01:20,820 --> 00:01:22,763 So HTML to Pug. 23 00:01:23,640 --> 00:01:25,950 So again, let's take a quick look at that. 24 00:01:25,950 --> 00:01:28,260 And so basically what this allows you to do 25 00:01:28,260 --> 00:01:31,030 is to paste some HTML in here 26 00:01:31,030 --> 00:01:35,660 then click Convert and it will output the Pug code for you. 27 00:01:35,660 --> 00:01:38,170 So that can be very handy when you try to convert 28 00:01:38,170 --> 00:01:42,263 some existing pages that you already have an HTML to Pug. 29 00:01:45,010 --> 00:01:47,810 Anyway, when we're building an HTML email, 30 00:01:47,810 --> 00:01:50,350 we always need to inline all the styles. 31 00:01:50,350 --> 00:01:53,290 And so that's why you have this ton of CSS 32 00:01:53,290 --> 00:01:55,240 right here inside this file. 33 00:01:55,240 --> 00:01:58,000 But, of course, this makes this file a bit noisy 34 00:01:58,000 --> 00:02:01,213 and so let's grab all of that and export it. 35 00:02:02,350 --> 00:02:04,810 All right, so, yeah. 36 00:02:04,810 --> 00:02:05,703 So that's it. 37 00:02:06,610 --> 00:02:07,443 So cut it, 38 00:02:08,380 --> 00:02:10,720 and here create a new file, 39 00:02:10,720 --> 00:02:14,520 and then, just as before, with files that I'm gonna include, 40 00:02:14,520 --> 00:02:17,827 I use the underscore then style.pug. 41 00:02:20,980 --> 00:02:22,710 So paste that here. 42 00:02:22,710 --> 00:02:26,450 And now we need to also adjust all this insetting here 43 00:02:26,450 --> 00:02:29,210 and so again, Command + Shift + P 44 00:02:29,210 --> 00:02:32,820 or probably on Windows, Ctrl + Shift + P. 45 00:02:32,820 --> 00:02:35,823 And then just write pug for beautify pug. 46 00:02:36,890 --> 00:02:39,053 And so that makes our code nice. 47 00:02:40,090 --> 00:02:41,623 Close that one up here, 48 00:02:42,770 --> 00:02:43,973 and now include_style. 49 00:02:49,060 --> 00:02:52,730 Okay, and now you see all of these codes down here, 50 00:02:52,730 --> 00:02:55,750 which looks really confusing and that's actually the reason 51 00:02:55,750 --> 00:02:59,400 why I copied this template from that GitHub repo 52 00:02:59,400 --> 00:03:00,680 that I showed you before. 53 00:03:00,680 --> 00:03:03,160 So there's a lot of tables going on 54 00:03:03,160 --> 00:03:05,080 and that's because many email clients 55 00:03:05,080 --> 00:03:08,410 actually only understand tables for formatting. 56 00:03:08,410 --> 00:03:11,800 So we have all these stuff here that's not really meaningful 57 00:03:11,800 --> 00:03:15,350 with table rows inside of tables inside of tables. 58 00:03:15,350 --> 00:03:16,600 Am I right? 59 00:03:16,600 --> 00:03:20,720 But what matters here is this content area here. 60 00:03:20,720 --> 00:03:22,440 And so this is the part of the template 61 00:03:22,440 --> 00:03:25,340 where we're gonna put all our content. 62 00:03:25,340 --> 00:03:27,370 Now, the thing is that we, of course, 63 00:03:27,370 --> 00:03:29,370 will have many different templates. 64 00:03:29,370 --> 00:03:30,600 In the case of this project, 65 00:03:30,600 --> 00:03:32,930 we will actually only create two ourselves 66 00:03:32,930 --> 00:03:36,410 but there might be many emails for many situations 67 00:03:36,410 --> 00:03:39,610 and so, of course, we will need a way of reusing 68 00:03:39,610 --> 00:03:42,840 all of these code that is outside of this content. 69 00:03:42,840 --> 00:03:46,200 So, basically, all of these here should be reusable, 70 00:03:46,200 --> 00:03:49,050 and actually, that's exactly what we did before 71 00:03:49,050 --> 00:03:50,853 with our base template here. 72 00:03:52,352 --> 00:03:53,185 All right. 73 00:03:53,185 --> 00:03:56,450 So we put everything that is reusable for all the templates 74 00:03:56,450 --> 00:04:00,540 inside of this base, then we have our block there 75 00:04:00,540 --> 00:04:02,150 and all the other templates, 76 00:04:02,150 --> 00:04:04,200 then simply extend this block. 77 00:04:04,200 --> 00:04:07,280 And so that is exactly what we will do now. 78 00:04:07,280 --> 00:04:12,240 So let's actually go ahead and cut all of these from here, 79 00:04:12,240 --> 00:04:15,517 create a new template called baseEmail, 80 00:04:20,399 --> 00:04:21,623 and then put that here. 81 00:04:23,530 --> 00:04:27,550 And now, for the content itself, of course, 82 00:04:27,550 --> 00:04:30,100 we remove that from the base. 83 00:04:30,100 --> 00:04:31,773 So cut that one from here, 84 00:04:32,760 --> 00:04:34,550 and here let's create then a block 85 00:04:35,920 --> 00:04:37,423 called content, again. 86 00:04:39,101 --> 00:04:39,934 All right. 87 00:04:39,934 --> 00:04:43,900 And so now here, in our welcome template, 88 00:04:43,900 --> 00:04:45,600 we then put that content 89 00:04:48,260 --> 00:04:49,883 inside that content block. 90 00:04:50,880 --> 00:04:51,870 Okay. 91 00:04:51,870 --> 00:04:54,750 And now just to finish, we then need to say 92 00:04:54,750 --> 00:04:57,190 that it extends, so that this template here 93 00:04:58,070 --> 00:05:00,187 extends the baseEmail. 94 00:05:04,160 --> 00:05:08,470 Let's format this again with this command 95 00:05:08,470 --> 00:05:10,670 and that's beautiful. 96 00:05:10,670 --> 00:05:11,503 Great. 97 00:05:12,450 --> 00:05:14,830 Now, here in our base template, 98 00:05:14,830 --> 00:05:18,620 we actually have now the subject as the title. 99 00:05:18,620 --> 00:05:20,780 And so that is the reason why I passed that 100 00:05:20,780 --> 00:05:23,023 into the template. 101 00:05:23,920 --> 00:05:27,030 So that is right here, remember? 102 00:05:27,030 --> 00:05:29,829 So into the template, we passed the subject, 103 00:05:29,829 --> 00:05:32,140 the URL and the firstName. 104 00:05:32,140 --> 00:05:35,980 And so let's now go ahead and use this in our template. 105 00:05:35,980 --> 00:05:39,470 And so the subject we already used here in the base 106 00:05:39,470 --> 00:05:42,120 but that's actually it for this file 107 00:05:42,120 --> 00:05:44,363 so we're not going to touch it again. 108 00:05:45,230 --> 00:05:48,540 And so now here is our real template. 109 00:05:48,540 --> 00:05:53,540 So we have here the name and so let's actually replace that 110 00:05:53,670 --> 00:05:55,893 with the first name variable. 111 00:05:59,210 --> 00:06:03,840 So firstName here, then we have all these nice texts here. 112 00:06:03,840 --> 00:06:07,550 So, welcome to the family, all that stuff. 113 00:06:07,550 --> 00:06:10,150 And then down here we have that green button 114 00:06:10,150 --> 00:06:13,370 that I talked about when I showed you the template on GitHub 115 00:06:13,370 --> 00:06:17,220 and so on that button, we say upload user photo. 116 00:06:17,220 --> 00:06:22,043 And so here we need to specify that URL that we passed in. 117 00:06:27,760 --> 00:06:31,380 All right, so it's called URL, right. 118 00:06:31,380 --> 00:06:35,290 And so, now we put that on this button here 119 00:06:35,290 --> 00:06:36,720 and that's actually it. 120 00:06:36,720 --> 00:06:39,440 All of the rest here is just static content 121 00:06:39,440 --> 00:06:43,130 that we do not need to change at all, all right? 122 00:06:43,130 --> 00:06:47,470 So this welcome template here will now get used 123 00:06:47,470 --> 00:06:49,790 whenever we call sendWelcome. 124 00:06:49,790 --> 00:06:53,130 And so let's now actually go ahead and do that. 125 00:06:53,130 --> 00:06:57,190 So from where do we want to send the welcome email? 126 00:06:57,190 --> 00:07:00,540 Well, that is in the authController 127 00:07:00,540 --> 00:07:03,800 and to, I believe there's a sign up function 128 00:07:03,800 --> 00:07:05,663 or register or something like that, 129 00:07:07,140 --> 00:07:08,430 and it's right here. 130 00:07:08,430 --> 00:07:10,240 So this sign up. 131 00:07:10,240 --> 00:07:13,130 And so into this, we need to import the email 132 00:07:13,130 --> 00:07:14,093 and then use it. 133 00:07:15,000 --> 00:07:18,760 And, actually, already we have sendEmail, 134 00:07:18,760 --> 00:07:21,990 but now remember that is called Email, 135 00:07:21,990 --> 00:07:24,533 so with a capital E like this. 136 00:07:26,400 --> 00:07:29,980 Now we used that variable before somewhere down here, 137 00:07:29,980 --> 00:07:30,973 so let's go there. 138 00:07:33,438 --> 00:07:35,750 All right, and so this code here at this point 139 00:07:35,750 --> 00:07:39,520 is no longer working but we will fix that in the next video. 140 00:07:39,520 --> 00:07:41,440 So for now, let's just comment it out 141 00:07:44,030 --> 00:07:45,983 so that it doesn't do any damage. 142 00:07:48,409 --> 00:07:51,960 But anyway, let's now use this email class right here. 143 00:07:59,060 --> 00:08:04,060 So new Email, and then remember first up is the user 144 00:08:05,260 --> 00:08:08,700 and actually VS code knows that and shows that here 145 00:08:08,700 --> 00:08:12,890 and so user is the newUser that we have up here 146 00:08:15,810 --> 00:08:19,803 and then the URL that we're gonna create here in a second. 147 00:08:22,150 --> 00:08:27,150 So const url equals, let's put it to zero, for now. 148 00:08:30,315 --> 00:08:32,565 Okay, and then sendWelcome. 149 00:08:36,230 --> 00:08:39,049 And now all we need to do is to actually await 150 00:08:39,049 --> 00:08:40,783 this sendWelcome function. 151 00:08:42,860 --> 00:08:45,980 All right, so we do that, that we only move on here 152 00:08:45,980 --> 00:08:49,923 to the next step after the email has actually been sent. 153 00:08:50,880 --> 00:08:52,910 And we can do that, of course, 154 00:08:52,910 --> 00:08:57,233 because sendWelcome is an async function, remember that. 155 00:08:58,100 --> 00:08:59,750 And so when we actually use it, 156 00:08:59,750 --> 00:09:02,163 we then wait until it finishes. 157 00:09:03,580 --> 00:09:05,960 All right, and so this is all we need to do 158 00:09:05,960 --> 00:09:08,170 in order to send emails now, 159 00:09:08,170 --> 00:09:12,270 but we still need to specify our URL here. 160 00:09:12,270 --> 00:09:15,110 Now, what URL do we actually want here? 161 00:09:15,110 --> 00:09:17,200 Well, remember that here on the button, 162 00:09:17,200 --> 00:09:20,910 it says Upload_user_photo, right? 163 00:09:20,910 --> 00:09:22,540 And so basically, we want to point 164 00:09:22,540 --> 00:09:24,603 to that user account page. 165 00:09:25,600 --> 00:09:29,600 So, basically, right here. 166 00:09:29,600 --> 00:09:33,833 So for now, let's copy it, but we will then change it. 167 00:09:35,630 --> 00:09:37,100 And we could leave it like this 168 00:09:37,100 --> 00:09:39,640 but then it would only work in development 169 00:09:39,640 --> 00:09:42,510 and not production, 'cause, of course, 170 00:09:42,510 --> 00:09:45,720 this here does not exist when we're in production. 171 00:09:45,720 --> 00:09:49,140 And so instead of basically hard coding it like this, 172 00:09:49,140 --> 00:09:51,373 we will get this data from the request. 173 00:09:53,050 --> 00:09:56,830 So basically, we will get what protocol we're using, 174 00:09:56,830 --> 00:10:01,830 if we're using HTTP or HTTPS, and then also this host. 175 00:10:03,440 --> 00:10:06,920 Okay, and both of that we can get from the request. 176 00:10:06,920 --> 00:10:09,350 So let's replace all of these here 177 00:10:11,237 --> 00:10:12,830 and make this a template string 178 00:10:14,310 --> 00:10:18,590 and then we can say request.protocol 179 00:10:22,000 --> 00:10:24,193 then colon, slash, slash, 180 00:10:26,850 --> 00:10:30,580 and then request.get. 181 00:10:30,580 --> 00:10:32,710 So we need to use this getter function 182 00:10:32,710 --> 00:10:35,653 and what we want to get is the host. 183 00:10:36,710 --> 00:10:38,670 And so when we're in development, 184 00:10:38,670 --> 00:10:41,750 then, of course, this here will be the local host 185 00:10:41,750 --> 00:10:43,263 on port 3000. 186 00:10:46,160 --> 00:10:47,790 Okay so let's just console it 187 00:10:51,700 --> 00:10:52,703 just to make sure. 188 00:10:54,020 --> 00:10:57,460 Okay, and now, let's actually then test it. 189 00:10:57,460 --> 00:11:00,723 And all we need to do for that is to just create a new user. 190 00:11:02,170 --> 00:11:04,543 So let's do that here in Postman. 191 00:11:06,550 --> 00:11:07,943 So Sign Up, 192 00:11:09,980 --> 00:11:13,860 and now in our Body, let's create a new name, 193 00:11:13,860 --> 00:11:15,223 let's say Test User. 194 00:11:17,700 --> 00:11:20,280 And here, all of these doesn't really matter, 195 00:11:20,280 --> 00:11:22,767 so let's just say test@natours.io 196 00:11:26,310 --> 00:11:28,110 and with the same standard password. 197 00:11:28,990 --> 00:11:31,600 And so now when we create this new user, 198 00:11:31,600 --> 00:11:34,850 then we should get a new email into our Mailtrap, 199 00:11:34,850 --> 00:11:36,513 so that we can take a look at it. 200 00:11:37,470 --> 00:11:41,583 So let's try that and we got some nice error down here. 201 00:11:42,420 --> 00:11:44,560 So let's take a look at that. 202 00:11:44,560 --> 00:11:48,200 And it says that it couldn't find this file. 203 00:11:48,200 --> 00:11:52,373 So there's some error in our email handler here. 204 00:11:53,460 --> 00:11:56,353 And so let's try to find where that is. 205 00:11:57,794 --> 00:11:59,003 Ah, it's down here. 206 00:11:59,910 --> 00:12:02,160 And so the problem is that the folder here 207 00:12:02,160 --> 00:12:05,113 is called email and here I called it emails. 208 00:12:07,130 --> 00:12:09,340 So let's just say email, 209 00:12:09,340 --> 00:12:10,850 I prefer that one. 210 00:12:10,850 --> 00:12:12,263 And so now it should work. 211 00:12:13,480 --> 00:12:15,400 Oh, and now we get the next error, 212 00:12:15,400 --> 00:12:18,160 because this email here already exists. 213 00:12:18,160 --> 00:12:20,210 And that's because in the previous step, 214 00:12:20,210 --> 00:12:22,900 we actually did create the error, the only problem 215 00:12:22,900 --> 00:12:24,740 was then with sending the email. 216 00:12:24,740 --> 00:12:27,303 So let's do that again here, test two. 217 00:12:30,100 --> 00:12:31,500 And one more error. 218 00:12:31,500 --> 00:12:35,220 This time coming directly from Pug. 219 00:12:35,220 --> 00:12:39,320 So, only named blocks and mixins can appear at the top level 220 00:12:39,320 --> 00:12:40,763 of an extending template. 221 00:12:42,440 --> 00:12:44,203 And so something is wrong here, 222 00:12:45,170 --> 00:12:47,490 and indeed it is. 223 00:12:47,490 --> 00:12:49,573 So that's actually exactly the error 224 00:12:49,573 --> 00:12:53,630 that it told us we had and that is we can only have extends 225 00:12:53,630 --> 00:12:56,020 and block but here we have this paragraph 226 00:12:56,020 --> 00:12:58,540 also at the top level. 227 00:12:58,540 --> 00:12:59,920 So that's not allowed. 228 00:12:59,920 --> 00:13:03,503 So let's put it where it belongs, which is right here. 229 00:13:05,300 --> 00:13:09,020 Give that a save, try it one more time, 230 00:13:09,020 --> 00:13:11,300 and of course now we get this error. 231 00:13:11,300 --> 00:13:12,873 So let's say test three. 232 00:13:18,011 --> 00:13:20,310 Okay, now we're good to go. 233 00:13:20,310 --> 00:13:22,670 So we successfully created the new user, 234 00:13:22,670 --> 00:13:23,980 he has logged in. 235 00:13:23,980 --> 00:13:26,480 And now let's take a look at Mailtrap 236 00:13:26,480 --> 00:13:28,823 to see if we actually got our email. 237 00:13:30,460 --> 00:13:31,473 So Mailtrap. 238 00:13:34,310 --> 00:13:35,963 Let me log in here real quick. 239 00:13:37,320 --> 00:13:40,030 And here is our Natours inbox, 240 00:13:40,030 --> 00:13:43,450 and indeed, here is this new email from a minute ago 241 00:13:43,450 --> 00:13:46,300 saying welcome to the Natours family. 242 00:13:46,300 --> 00:13:47,170 Great. 243 00:13:47,170 --> 00:13:50,560 And it actually looks really nice, right? 244 00:13:50,560 --> 00:13:53,630 So that's all the texts that we had in our template. 245 00:13:53,630 --> 00:13:56,313 We can also see the complete HTML here. 246 00:13:59,160 --> 00:14:01,330 Also here we have the text. 247 00:14:01,330 --> 00:14:03,940 And so remember that we created this one here 248 00:14:03,940 --> 00:14:06,130 from the HTML to text package 249 00:14:06,130 --> 00:14:09,443 and so we can confirm that it works just fine as well. 250 00:14:10,330 --> 00:14:12,850 And, uh, yeah. 251 00:14:12,850 --> 00:14:15,333 Let's just try to click here on this button, 252 00:14:16,590 --> 00:14:20,450 and indeed it takes us to our account page. 253 00:14:20,450 --> 00:14:23,740 Now, right now we're actually logged in as Aarav 254 00:14:23,740 --> 00:14:27,010 because we already were logged in as that user 255 00:14:27,010 --> 00:14:28,680 but that's not really the point 256 00:14:28,680 --> 00:14:31,200 because this email here kind of supposes 257 00:14:31,200 --> 00:14:34,560 that you are signing up from the website, right? 258 00:14:34,560 --> 00:14:36,420 Now, that doesn't work at this point, 259 00:14:36,420 --> 00:14:39,510 so we don't have any sign up form on our website 260 00:14:39,510 --> 00:14:41,850 but the really important part here 261 00:14:41,850 --> 00:14:45,980 is that our email here now works just fine, 262 00:14:45,980 --> 00:14:47,800 the button here also works. 263 00:14:47,800 --> 00:14:49,620 And so that big email handler 264 00:14:49,620 --> 00:14:52,710 that we created in the last lecture is doing its job 265 00:14:52,710 --> 00:14:54,860 just as well as the email template 266 00:14:54,860 --> 00:14:56,660 that we created in this video. 267 00:14:56,660 --> 00:14:59,090 So, I'm really happy with this result. 268 00:14:59,090 --> 00:15:01,300 Next up, let's do something similar 269 00:15:01,300 --> 00:15:03,223 for the password reset emails. 20737

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.