Skip to content

Commit 7b9fa03

Browse files
Support code checkin for "Sending Emails with Python" article (#752)
* Support code checkin * Updating to reflect Ruby linter changes * Updating with review feedback, renaming to snake case * Updating with review feedback, adding two other samples * Final QA --------- Co-authored-by: Bartosz Zaczyński <bartosz.zaczynski@gmail.com>
1 parent ec9c5ab commit 7b9fa03

17 files changed

Lines changed: 523 additions & 0 deletions

python-send-email/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Sending Emails With Python
2+
3+
Source files supporting the [Sending Emails With Python](https://realpython.com/python-send-email/) tutorial on [Real Python](https://realpython.com).

python-send-email/address_email.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env python3
2+
3+
import csv
4+
from email.message import EmailMessage
5+
from email.headerregistry import Address
6+
7+
from send_msg import send
8+
9+
sender_email = "my@gmail.com"
10+
sender = Address(display_name="Me", addr_spec=sender_email)
11+
12+
with open("contacts.csv") as file:
13+
reader = csv.reader(file)
14+
next(reader) # Skip header row
15+
for name, email, grade in reader:
16+
recipient = Address(display_name=name, addr_spec=email)
17+
msg = EmailMessage()
18+
msg["to"] = recipient
19+
msg["from"] = sender
20+
msg["Subject"] = "Your grade"
21+
msg.set_content(f"Congratulations, {name}, you got a {grade}.")
22+
23+
send(msg, sender_email)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/usr/bin/env python3
2+
3+
from send_msg import send
4+
from email.message import EmailMessage
5+
from pathlib import Path
6+
7+
sender_email = "my@gmail.com"
8+
receiver_email = "your@gmail.com"
9+
10+
# Build Email Message
11+
msg = EmailMessage()
12+
msg["to"] = receiver_email
13+
msg["from"] = sender_email
14+
msg["subject"] = "Attachment Test Message"
15+
16+
text = "Please find a JPG attached."
17+
msg.set_content(text)
18+
19+
attachment_file = Path("smiley-small.jpg")
20+
with open(attachment_file, "rb") as attachment:
21+
# Add attachment to message
22+
msg.add_attachment(
23+
attachment.read(),
24+
maintype="image",
25+
subtype="jpeg",
26+
filename=attachment_file.name,
27+
)
28+
29+
# Send message
30+
send(msg, sender_email)

python-send-email/contacts.csv

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
name,email,grade
2+
Ron Obvious,my+obvious@gmail.com,B+
3+
Killer Rabbit,my+rabbit@gmail.com,A
4+
Brian,my+brian@gmail.com,C

python-send-email/csv_email.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/env python3
2+
3+
import csv
4+
from email.message import EmailMessage
5+
6+
from send_msg import send
7+
8+
sender_email = "my@gmail.com"
9+
10+
with open("contacts.csv") as file:
11+
reader = csv.reader(file)
12+
next(reader) # Skip header row
13+
for name, email, grade in reader:
14+
msg = EmailMessage()
15+
msg["to"] = f"{name} <{email}>"
16+
msg["from"] = f"Me <{sender_email}>"
17+
msg["Subject"] = "Your grade"
18+
msg.set_content(f"Congratulations, {name}, you got a {grade}.")
19+
20+
send(msg, sender_email)

python-send-email/html_email.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/usr/bin/env python3
2+
3+
from send_msg import send
4+
from email.message import EmailMessage
5+
6+
sender_email = "my@gmail.com"
7+
receiver_email = "your@gmail.com"
8+
9+
# Build Email Message
10+
msg = EmailMessage()
11+
msg["to"] = receiver_email
12+
msg["from"] = sender_email
13+
msg["subject"] = "HTML Test Message"
14+
15+
text = """\
16+
Hi,
17+
How are you?
18+
Real Python has many great tutorials:
19+
realpython.com"""
20+
21+
html = """\
22+
<html>
23+
<body>
24+
<p>Hi,<br>
25+
How are you?<br>
26+
<a href="https://realpython.com">Real Python</a>
27+
has many great tutorials.
28+
</p>
29+
</body>
30+
</html>
31+
"""
32+
33+
msg.set_content(text)
34+
msg.add_alternative(html, subtype="html")
35+
36+
# Send message
37+
send(msg, sender_email)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/env python3
2+
3+
from send_msg import send
4+
from email.message import EmailMessage
5+
6+
sender_email = "my@gmail.com"
7+
receiver_email_1 = "your@gmail.com"
8+
receiver_email_2 = "your_other@gmail.com"
9+
cc_receiver_email = "cc-you@gmail.com"
10+
bcc_receiver_email = "bcc-you@gmail.com"
11+
12+
# Build Email Message
13+
msg = EmailMessage()
14+
msg["to"] = [receiver_email_1, receiver_email_2]
15+
msg["cc"] = cc_receiver_email
16+
msg["bcc"] = bcc_receiver_email
17+
msg["from"] = sender_email
18+
msg["subject"] = "Test Message"
19+
msg.set_content("This is a test message")
20+
21+
# Send message
22+
send(msg, sender_email)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/env python3
2+
3+
from send_msg import send
4+
from email.message import EmailMessage
5+
6+
sender_email = "my@gmail.com"
7+
receiver_email = "your@gmail.com"
8+
9+
# Build Email Message
10+
msg = EmailMessage()
11+
msg["to"] = receiver_email
12+
msg["from"] = sender_email
13+
msg["subject"] = "Test Message"
14+
msg.set_content("This is a test message")
15+
16+
# Send message
17+
send(msg, sender_email)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from proton_mail_bridge_client import ProtonMailClient
2+
3+
with ProtonMailClient(
4+
email="your-email@proton.me",
5+
password="your-bridge-password", # Bridge password, NOT account password
6+
) as client:
7+
client.send_mail(
8+
to="you@proton.com",
9+
subject="Test",
10+
body="This is a test",
11+
)

python-send-email/pyproject.toml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[project]
2+
name = "python-send-email"
3+
version = "0.1.0"
4+
description = "Source files supporting 'Sending Emails With Python' tutorial on Real Python"
5+
readme = "README.md"
6+
requires-python = ">=3.12"
7+
dependencies = [
8+
"aiosmtpd>=1.4.6",
9+
"ruff>=0.15.9",
10+
]
11+
12+
[dependency-groups]
13+
dev = [
14+
"black>=26.3.1",
15+
"flake8>=7.3.0",
16+
"rope>=1.14.0",
17+
]

0 commit comments

Comments
 (0)