#100DaysOfCode in Python Transcripts
Chapter: Days 64-66: Sending emails with smtplib
Lecture: Getting into MIME
0:00 Before we get started with the actual code,
0:03 let's just understand a bit what MIME is.
0:06 MIME is actually an acronym for
0:09 Multipurpose Internet Mail Extensions.
0:13 I'd rather say MIME than all of that.
0:16 With MIME, it actually extends email functionality.
0:21 You think about all the cool HTML stuff,
0:24 and audio, video, images and so on
0:27 that you can attach to emails, and all of that.
0:30 That's all thanks to MIME.
0:33 It's not plain text.
0:35 It actually allows you to give your emails multiple parts
0:41 such as header information, and all of those nice things.
0:44 One thing you'll notice looking at the screen here
0:46 is without email from the previous video,
0:49 the SMTPlib sendmail, we don't have a subject.
0:53 We don't really have much at all.
0:55 There was nothing for BCC.
0:58 There was nothing.
1:00 That was the real basic, basic stuff.
1:04 With MIME we get to go a bit further than that.
1:07 Let's hop into the emailer-mime.py file you created,
1:11 and let's get cracking.
1:13 Now we're import smtplib as we did before.
1:20 We'll keep that the same.
1:22 Now we need to actually start importing the MIME modules.
1:26 It's not too bad.
1:29 Just roll with it here, alright?
1:30 This seems a bit complex, but from email.MIME,
1:37 this is all just the stuff in the module
1:39 that we're taking out, okay?
1:42 We're not going to import everything, just what we need.
1:45 From email.mime.multipart, import MIMEMultipart.
1:51 This is the module that's going to allow us to,
1:55 I guess, section up our email.
1:58 Build our email together, alright?
2:01 You'll see what that means in a minute so just roll with it.
2:04 from email.mime.text, import MIMEText.
2:11 This is just to do with the text section.
2:14 Again, you'll see how this all fits together in a minute.
2:18 Alright, so we'll stick with what we know.
2:20 We get a from_address.
2:22 firstname.lastname@example.org, okay?
2:26 Now we want a to_address.
2:29 Now one thing I would like you to consider here
2:33 is the BCC, the essence of BCC, alright?
2:38 That was a carbon copy, blind carbon copy.
2:42 That means no one can see who's been BCC'd on an email.
2:47 Now with that, you'll notice that MIME actually fails us.
2:51 I'm going to touch on that in the next video,
2:54 so don't panic.
2:55 Let's just go with this, okay?
2:58 To address, let's again stick with what we know.
3:07 Alright, now what we want to do is we want to take
3:13 the ability to build our email using multipart.
3:19 We're going to take that function and we're going to assign it
3:23 to the message object, alright?
3:25 We're going to make that our message object.
3:29 Why do we do that?
3:30 Just because it's easier to use message
3:32 instead of my multipart.
3:34 Again, you will see what I mean.
3:37 Alright, so what are the different sections
3:38 that we want to build?
3:39 Well we want to build our header.
3:41 To build our header, this is the format.
3:44 We want to have a from field, so message from...
3:51 Is what?
3:52 Well it's going to be our from_address, that's it.
3:57 What we've done is we've actually built
3:58 this little header tag that will actually extend
4:01 the functionality of our email.
4:03 Our email will look nicer and will have that as a valid id
4:08 for the from field.
4:10 Next, we want to have to, so message to...
4:16 We're going to use our to address.
4:19 Nice and easy so far, right?
4:22 Now for the fun part.
4:24 Now we get to specify a subject.
4:27 Message subject equals, well how about we take
4:31 that first line from the last one?
4:33 New releases and sales on steam, okay?
4:40 You can call that obviously whatever you want
4:41 for this practice round.
4:43 Now back to this, we'll build our body.
4:47 I'm just going to take the exact same text
4:51 from our previous script, dump it in there, right?
4:57 Now we want to build it all together.
5:00 We go message.attach, and now we're going to attach,
5:06 if you just paid attention for a second there
5:09 you would've seen that we just created body.
5:11 We didn't actually assign it to message.
5:15 This isn't included in our message.
5:18 That's what this attach thing is doing.
5:19 It's attaching our bulk, our body to the message.
5:24 Message.attach, and this is where MIMEText comes in.
5:30 Now we're taking our body.
5:32 Again, that's this object here, this variable.
5:35 What kind of an email, what kind of a body
5:39 is this going to be?
5:40 Well it's just going to be plain text, not okay text.
5:44 Yes, to answer your question, you can put HTML there.
5:48 Your body can be filled with HTML tags.
5:52 You can literally write HTML between these three here,
5:56 and it will form your HTML email.
5:59 That's just a bit beyond the scope of this
6:01 as it's a bit too much.
6:02 Alright, now we move into our normal SMTP stuff,
6:07 so a bit of magic.
6:09 We're just going to make all of that appear here,
6:12 and we're back.
6:13 It's exactly the same smtplib stuff
6:18 that we saw in the previous video.
6:20 Just chuck it in there.
6:21 You can feel free to edit your existing script,
6:23 whatever you want to do.
6:25 Now when we run sendmail, if you remember
6:29 we threw the body in there, okay?
6:32 We had the from_address, the to_address, and the body.
6:36 In this case, body has already been thrown into our message,
6:41 so how do we combine that?
6:42 How do we get this working?
6:43 Well sendmail needs string, it needs text.
6:49 It doesn't like an object like the message object
6:54 being thrown in there, okay?
6:56 What we need to do is get our message as a string.
7:03 message.as_string, and we'll assign that to text.
7:10 Again, this here text, you can make that whatever you want.
7:13 Let's give ourselves some white space.
7:15 Delete that in a minute.
7:17 Alright, and then we get back down to smtpserver.sendmail,
7:22 and we're going to go from_address, oops.
7:26 We're going to go to_address, and we're going to go text.
7:32 Then as usual, SMTPserver.quit, and we're done, okay?
7:40 Now let's just quickly throw in this
7:43 print email sent successfully.
7:46 Save that.
7:48 Now when you run your script,
7:50 you should get an almost identical email.
7:54 The body should be exactly the same, because again,
7:57 we didn't do anything differently here.
7:59 The thing that's cool is that you should have a subject,
8:02 and some more header information.
8:05 Let's have a look at that.
8:08 Alright, so there's the email.
8:10 New releases and sales on steam.
8:13 And now you can see the same information there.
8:16 When we drop that down we can see a to_address,
8:20 and which is my email,
8:22 and yeah, that's it.