Python-powered chat apps with Twilio and SendGrid Transcripts
Chapter: Beautiful confirmation emails
Lecture: Send the first email: Basic version

Login or purchase this course to watch this video and the rest of the course contents.
0:00 I'm going to finally start sending that email and see if all the stuff we put
0:03 together about the secrets and the api keys.
0:05 If we got all those details right,
0:07 let's focus on the bottom bit for just a minute.
0:09 We're going to create a message and the way we do that as good as
0:12 SendGrid haven't imported it from there.
0:14 But I'm using the name space.
0:15 I do like that style. So you know where stuff comes from and it's going
0:19 to take a mail. When I create one of these and in the mail,
0:21 we got to pass a from potentially multiple two emails the subject.
0:26 Plain text HTML content, some email clients except plain text only.
0:30 Some will show HTML, and you can give a little better HTML view and a
0:34 little bit better. More specialized plaintext view here and things like that.
0:38 To notice when need to have the from email address,
0:40 the to email address and so on,
0:42 and that kind of falls up into this area.
0:44 So working that would say from=.
0:47 Now I could possibly say string here.
0:50 It will take different things, but what I'd like to do is be a little
0:53 more specific and have more control.
0:55 So I can say sendgrid Uh,
0:57 from there's a From and a To and a Subject and all those types of things
1:03 I want to say 'From' we could put in the email say,
1:06 michael@talkpython.fm and the name. You're the name.
1:12 Let's just put my name and because From is a keyword will say from_email,
1:18 and we need to do something similar in the to email,
1:20 but we're going to do a to,
1:23 and this information is coming through as part of the API's.
1:27 We got the order,
1:28 which has a user, and the user has an email,
1:30 and we have an order which still has that user,
1:32 which has a name. The title or the subject will be your order receipt from
1:42 Cloud City cakes. And HTML.
1:45 Let's put something really fancy, each one,
1:49 your receipt as an H1,
1:50 and then maybe we'll do a line break, a new line, line break and new line
1:55 We'll just say Thanks for ordering.
2:01 I will just say like large chocolate cake or whatever so we'll say large size
2:07 {order.flavor} cake.
2:10 We'll be, of course, much more specific about this later.
2:13 And we can also put the text going to be something like this.
2:17 But I'll just say yes, the \n If you're not familiar,
2:25 that means line break the <br>.
2:27 We don't want that in there.
2:29 Perfect. So we're gonna order that cake and this is all the details that we
2:34 need, in order to create our message.
2:37 So now we come down here and say message or mail or whatever you wanna call
2:40 it sendgrid.mail and look at all the things it takes.
2:44 It takes it from and takes a to makes a subject, plain text content,
2:51 which we just called text and html content,
2:54 which we called html. And we don't need anything else.
2:58 Very cool, right. And then finally,
2:59 to send the message down here.
3:02 Let's break this up. We'll say response =.
3:06 Remember the top. We created this client.
3:08 It has our api_key, client.send And what I'm going to send the
3:14 message. And also just to be a little bit clear,
3:17 let's go ahead and set the return type so we know exactly what we're working with
3:21 So what we get back?
3:28 Is this Python, http_client.client.Response.
3:32 And now that we know what it is,
3:34 we can go to things like,
3:35 Hey, it's status code. Perfect.
3:37 And so the final thing we could do,
3:39 No, no. Still need that down there.
3:40 Do we? Final thing to do here is we're going to say
3:45 if response.status_code not in {200, 201}.
3:53 Whoa, something went wrong. We had a problem.
3:56 Otherwise, we could just print send emails successfully.
4:04 Do we have it, again we solve these other things to do about making fancier
4:08 content to send and attaching things.
4:11 But here's the basic flow. When a create a client,
4:13 with our API keys stored secretly,
4:16 we're going to set up these rich to from subject,
4:19 etcetera. Fields create the message,
4:21 and then we're going to use the client to send the message,
4:24 get one of these responses back and make sure it's a success oriented status code.
4:28 If it's not raising their otherwise,
4:30 you know they've already received their email.
4:32 Everything should be fine. Let's fire this up and see how we're doing.
4:37 Again, we could do this by sending an email through WhatsApp or triggering this API call through
4:43 WhatsApp. But just to save us the effort of filling out all those details,
4:46 let's just use Postman once again.
4:48 And just so we see something different because it's coming from Michael Kennedy,
4:52 I'll say I'm Mike Kennedy and this is coming from It's going to go to
4:57 contact@talkpython, just the general like way to reach us.
5:01 What are we gonna order? We're going to order a red velvet small red velvet
5:06 cake with chocolate popping in lemon frosting.
5:10 But this this is the stuff that should appear in our email.
5:14 Make sure it's running. It is so without further a do we can press.
5:17 This should call that function. It should try to talk to send grid,
5:20 try to send us an email,
5:21 and then momentarily, I better have something in my email client.
5:27 Oh, no. Look what I did.
5:29 We got a 202 back and I was saying,
5:32 202 201 is good. So yeah,
5:34 202 is totally acceptable.
5:36 Let me update that and try again.
5:42 202 is also a success code.
5:48 Look at that. It returns successfully instead of crashing.
5:50 That's a really good sign. You can see.
5:54 Order 7 was sent to Mike Kennedy.
5:56 That's the new person over at contact.
5:58 Well, let's go check that email address.
6:00 Well, look at that. What we got your order received from Cloud City cakes
6:06 is in my inbox, and you can see right now it says sent via send
6:11 grid. That's because I haven't authorized or authenticated my domain,
6:15 But if I did, it would just come straight through.
6:17 As from Michael. And who is it to?
6:22 It's from michael@talkpython to Mike Kennedy at contact@talkpython.
6:27 Perfect. That is great. And here's our receipt and our message that we sent
6:31 over. Thanks for ordering your small red velvet cake.
6:35 I'd call that a success, a delicious one.