Python Sending Email
Sending emails using Python is generally done through the smtplib
module, implementing the Simple Mail Transfer Protocol. This means you can send an email from a Python script to one or more recipients. Here’s how:
Requirements
To send emails, you will need:
- An email server (e.g., Gmail’s SMTP server).
- Credentials (email address and password or an app-specific password).
- Python installed on your machine.
Basic Steps to Send an Email
a. Import required libraries
smtplib
for SMTP connection and email sending.email.message.EmailMessage
to create the email content.
b. Create an email
EmailMessage
object is used to specify from where, to whom, the subject, and description. You can also attach files wherever necessary.
c. Creating an SMTP Connection
The methods to connect to the email server are smtplib.SMTP()
and smtplib.SMTP_SSL().
d. Login to the server
You can log in using your credential details.
e. Sending an Email
By calling the send_message() method, it sends the email.
f. Close Connection
Always close the connection to free the resources.
Code Example
Here’s a step-by-step example of sending a plain-text email:
import smtplib
from email.message import EmailMessage
# Email details
sender_email = "your_email@example.com"
receiver_email = "recipient_email@example.com"
subject = "Test Email"
body = "Hello! This is a test email sent using Python."
# Create the EmailMessage object
msg = EmailMessage()
msg["From"] = sender_email
msg["To"] = receiver_email
msg["Subject"] = subject
msg.set_content(body)
# SMTP server details
smtp_server = "smtp.gmail.com"
smtp_port = 587 # For TLS
password = "your_email_password" # Use an app password for Gmail
# Send the email
try:
# Connect to the SMTP server
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls() # Secure the connection
server.login(sender_email, password) # Log in to the server
server.send_message(msg) # Send the email
print("Email sent successfully!")
except Exception as e:
print(f"Failed to send email: {e}")
Advanced Features
a. Sending HTML Emails
You can set the content type to HTML:
msg.add_alternative("""
<html>
<body>
<h1>Hello!</h1>
<p>This is a test email with <b>HTML content</b>.</p>
</body>
</html>
""", subtype="html")
b. Attaching Files
To attach a file:
with open("document.pdf", "rb") as file:
msg.add_attachment(file.read(), maintype="application", subtype="pdf", filename="document.pdf")
c. Sending Emails to Multiple Recipients
Use a list for the “To” field:
msg["To"] = ", ".join(["recipient1@example.com", "recipient2@example.com"])
Common SMTP Servers
Email Provider | SMTP Server | Port (TLS) | Port (SSL) |
---|---|---|---|
Gmail | smtp.gmail.com | 587 | 465 |
Outlook | smtp.office365.com | 587 | 465 |
Yahoo | smtp.mail.yahoo.com | 587 | 465 |
Best Practices
- Use App Passwords: Most of the email services, including Gmail, ask for app-specific passwords and not your password.
- Environment Variables: Store sensitive information such as email and passwords within environment variables or configuration files, not within the code itself.
- Error Handling: Always use try-except blocks to handle errors gracefully.
- Limitations: Be aware of your email provider’s sending limits to avoid being flagged as spam.