Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions python-email/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Source files supporting [Sending Emails with Python](https://realpython.com/python-send-email/) article on [Real Python](https://realpython.com)
23 changes: 23 additions & 0 deletions python-email/address-email.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/usr/bin/env python3

import csv

from send_msg import send
from email.message import EmailMessage
from email.headerregistry import Address

sender_email = "my@gmail.com"
sender = Address(display_name="Me", addr_spec=sender_email)

with open("contacts.csv") as file:
reader = csv.reader(file)
next(reader) # Skip header row
for name, email, grade in reader:
recipient = Address(display_name=name, addr_spec=email)
msg = EmailMessage()
msg["to"] = recipient
msg["from"] = sender
msg["Subject"] = "Your grade"
msg.set_content(f"Congratulations, {name}, you got a {grade}.")

send(msg, sender_email)
28 changes: 28 additions & 0 deletions python-email/attachment-email.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env python3

from send_msg import send
from email.message import EmailMessage
from os.path import basename

sender_email = "my@gmail.com"
receiver_email = "your@gmail.com"

# Build Email Message
msg = EmailMessage()
msg["to"] = receiver_email
msg["from"] = sender_email
msg["subject"] = "Attachment Test Message"

text = "Please find a JPG attached."
msg.add_alternative(text, subtype="plain")

attachment_filename = "smiley-small.jpg"
with open("smiley-small.jpg", "rb") as attachment:
attachment_data = attachment.read()
attachment_file = basename(attachment_filename)
msg.add_attachment(
attachment_data, maintype="image", subtype="jpeg", filename=attachment_file
)

# Send message
send(msg, sender_email)
4 changes: 4 additions & 0 deletions python-email/contacts.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name,email,grade
Ron Obvious,my+obvious@gmail.com,B+
Killer Rabbit,my+rabbit@gmail.com,A
Brian,my+brian@gmail.com,C
37 changes: 37 additions & 0 deletions python-email/html-email.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/usr/bin/env python3

from send_msg import send
from email.message import EmailMessage

sender_email = "my@gmail.com"
receiver_email = "your@gmail.com"

# Build Email Message
msg = EmailMessage()
msg["to"] = receiver_email
msg["from"] = sender_email
msg["subject"] = "HTML Test Message"

text = """\
Hi,
How are you?
Real Python has many great tutorials:
realpython.com"""

html = """\
<html>
<body>
<p>Hi,<br>
How are you?<br>
<a href="http://realpython.com">Real Python</a>
has many great tutorials.
</p>
</body>
</html>
"""

msg.set_content(text)
msg.add_alternative(html, subtype="html")

# Send message
send(msg, sender_email)
22 changes: 22 additions & 0 deletions python-email/multiple_recipients.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env python3

from send_msg import send
from email.message import EmailMessage

sender_email = "my@gmail.com"
receiver_email_1 = "your@gmail.com"
receiver_email_2 = "your_other@gmail.com"
cc_receiver_email = "cc-you@gmail.com"
bcc_receiver_email = "bcc-you@gmail.com"

# Build Email Message
msg = EmailMessage()
msg["to"] = [receiver_email_1, receiver_email_2]
msg["cc"] = cc_receiver_email
msg["bcc"] = bcc_receiver_email
msg["from"] = sender_email
msg["subject"] = "Test Message"
msg.set_content("This is a test message")

# Send message
send(msg, sender_email)
17 changes: 17 additions & 0 deletions python-email/plain-text-email.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env python3

from send_msg import send
from email.message import EmailMessage

sender_email = "my@gmail.com"
receiver_email = "your@gmail.com"

# Build Email Message
msg = EmailMessage()
msg["to"] = receiver_email
msg["from"] = sender_email
msg["subject"] = "Test Message"
msg.set_content("This is a test message")

# Send message
send(msg, sender_email)
17 changes: 17 additions & 0 deletions python-email/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[project]
name = "python-email"
version = "0.1.0"
description = "Source files supporting 'Sending Emails with Python' article on RealPython"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"aiosmtpd>=1.4.6",
"ruff>=0.15.9",
]

[dependency-groups]
dev = [
"black>=26.3.1",
"flake8>=7.3.0",
"rope>=1.14.0",
]
19 changes: 19 additions & 0 deletions python-email/reply-to-email.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env python3

from send_msg import send
from email.message import EmailMessage

sender_email = "my@gmail.com"
reply_email = "my.different@gmail.com"
receiver_email = "your@gmail.com"

# Build Email Message
msg = EmailMessage()
msg["to"] = receiver_email
msg["from"] = sender_email
msg["reply-to"] = reply_email
msg["subject"] = "Reply Please"
msg.set_content("Replies go to a different mailbox.")

# Send message
send(msg, sender_email)
10 changes: 10 additions & 0 deletions python-email/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# This file was autogenerated by uv via the following command:
# uv pip compile pyproject.toml -o requirements.txt
aiosmtpd==1.4.6
# via python-email (pyproject.toml)
atpublic==7.0.0
# via aiosmtpd
attrs==26.1.0
# via aiosmtpd
ruff==0.15.9
# via python-email (pyproject.toml)
23 changes: 23 additions & 0 deletions python-email/send_msg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/usr/bin/env python3

import smtplib
import ssl
from getpass import getpass


def send(msg, sender_email, debug=True):
if debug:
port = 8025
smtp_server = "localhost"
with smtplib.SMTP(smtp_server, port) as server:
server.send_message(msg)

else:
port = 465
smtp_server = "smtp.gmail.com"
password = getpass("Type your password and press enter: ")

context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
server.login(sender_email, password)
server.send_message(msg)
Binary file added python-email/smiley-small.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added python-email/smiley.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading