发送邮件是日常工作中非常常见的需求,无论是个人还是企业,掌握如何使用Python发送邮件都是非常有用的技能。今天我们就来学习Python发送邮件的三种方法,分别是使用smtplib模块、yagmail库和email库。每种方法都有其特点和适用场景,让我们一起来看看吧!
1. 使用smtplib模块发送邮件
smtplib
是 Python 标准库中的一个模块,用于发送邮件。它提供了 SMTP(Simple Mail Transfer Protocol)协议的实现。下面我们通过一个简单的例子来学习如何使用 smtplib
发送邮件。
示例代码
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件发送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'
# 邮件内容
message = MIMEText('这是一封测试邮件', 'plain', 'utf-8')
message['From'] = Header("发件人", 'utf-8')
message['To'] = Header("收件人", 'utf-8')
# 邮件主题
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
# 连接 SMTP 服务器并发送邮件
try:
smtp_obj = smtplib.SMTP('smtp.example.com', 25) # SMTP服务器地址和端口
smtp_obj.login('your_email@example.com', 'your_password') # 登录SMTP服务器
smtp_obj.sendmail(sender, receiver, message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
finally:
smtp_obj.quit()
代码解释
1. 导入模块:首先导入 smtplib
和 email.mime.text
模块。2. 设置邮件发送方和接收方:定义发送方和接收方的邮箱地址。3. 创建邮件内容:使用 MIMEText
创建邮件内容,并设置邮件的编码格式。4. 设置邮件头部信息:使用 Header
设置邮件的发送者、接收者和主题。5. 连接SMTP服务器:使用 smtplib.SMTP
连接到SMTP服务器,并使用 login
方法登录。6. 发送邮件:使用 sendmail
方法发送邮件。7. 异常处理:使用 try-except
块捕获可能的异常。8. 关闭连接:使用 quit
方法关闭SMTP连接。
2. 使用yagmail库发送邮件
yagmail
是一个简化了 smtplib
和 email
库使用的第三方库,使得发送邮件更加方便。下面我们来看一个使用 yagmail
发送邮件的例子。
安装yagmail
pip install yagmail
示例代码
import yagmail
# 邮件发送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'
# 邮件内容
subject = 'Python yagmail 邮件测试'
body = '这是一封使用 yagmail 发送的测试邮件'
# 创建 yagmail.SMTP 对象
yag = yagmail.SMTP(user=sender, password='your_password', host='smtp.example.com')
# 发送邮件
try:
yag.send(to=receiver, subject=subject, contents=body)
print("邮件发送成功")
except Exception as e:
print("Error: 无法发送邮件", e)
代码解释
1. 安装yagmail:使用 pip install yagmail
安装 yagmail
库。2. 导入yagmail:导入 yagmail
模块。3. 设置邮件发送方和接收方:定义发送方和接收方的邮箱地址。4. 创建邮件内容:定义邮件的主题和内容。5. 创建SMTP对象:使用 yagmail.SMTP
创建一个SMTP对象,并传入发送方的邮箱地址、密码和SMTP服务器地址。6. 发送邮件:使用 send
方法发送邮件。7. 异常处理:使用 try-except
块捕获可能的异常。
3. 使用email库发送邮件
email
库是 Python 标准库中的一个模块,用于构建复杂的邮件内容。结合 smtplib
,可以发送包含附件、HTML 内容等复杂邮件。下面是一个使用 email
库发送带附件的邮件的例子。
示例代码
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
# 邮件发送方和接收方
sender = 'your_email@example.com'
receiver = 'recipient_email@example.com'
# 创建一个 MIMEMultipart 对象
msg = MIMEMultipart()
# 设置邮件头部信息
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = 'Python email 库邮件测试'
# 添加邮件正文
body = '这是一封使用 email 库发送的测试邮件,包含附件'
msg.attach(MIMEText(body, 'plain'))
# 添加附件
filename = "example.txt"
attachment = open("path/to/example.txt", "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f'attachment; filename={filename}')
msg.attach(part)
# 连接 SMTP 服务器并发送邮件
try:
smtp_obj = smtplib.SMTP('smtp.example.com', 25)
smtp_obj.login(sender, 'your_password')
smtp_obj.sendmail(sender, receiver, msg.as_string())
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
finally:
smtp_obj.quit()
代码解释
1. 导入模块:导入 smtplib
和 email
库的相关模块。2. 设置邮件发送方和接收方:定义发送方和接收方的邮箱地址。3. 创建MIMEMultipart对象:使用 MIMEMultipart
创建一个邮件对象。4. 设置邮件头部信息:设置邮件的发送者、接收者和主题。5. 添加邮件正文:使用 MIMEText
创建邮件正文,并将其附加到邮件对象中。6. 添加附件:打开附件文件,使用 MIMEBase
创建附件对象,设置附件内容并进行 base64 编码,最后将附件附加到邮件对象中。7. 连接SMTP服务器:使用 smtplib.SMTP
连接到SMTP服务器,并使用 login
方法登录。8. 发送邮件:使用 sendmail
方法发送邮件。9. 异常处理:使用 try-except
块捕获可能的异常。10. 关闭连接:使用 quit
方法关闭SMTP连接。
实战案例:自动化发送每日天气报告
假设我们需要每天自动发送一封包含当日天气报告的邮件给指定的收件人。我们可以结合 requests
库获取天气数据,并使用 smtplib
或 yagmail
发送邮件。
获取天气数据
import requests
def get_weather(city):
url = f"http://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q={city}"
response = requests.get(url)
data = response.json()
return data['current']['temp_c'], data['current']['condition']['text']
temperature, condition = get_weather('New York')
print(f"当前温度: {temperature}°C, 天气状况: {condition}")
发送邮件
import yagmail
def send_weather_report(email, city):
temperature, condition = get_weather(city)
body = f"亲爱的用户,\n\n这是您订阅的每日天气报告。\n\n城市: {city}\n当前温度: {temperature}°C\n天气状况: {condition}\n\n祝您一天愉快!"
yag = yagmail.SMTP(user='your_email@example.com', password='your_password', host='smtp.example.com')
try:
yag.send(to=email, subject=f'{city} 每日天气报告', contents=body)
print("邮件发送成功")
except Exception as e:
print("Error: 无法发送邮件", e)
send_weather_report('recipient_email@example.com', 'New York')
代码解释
1. 获取天气数据:使用 requests
库调用天气 API 获取指定城市的天气数据。2. 发送邮件:使用 yagmail
库发送包含天气报告的邮件。3. 函数封装:将获取天气数据和发送邮件的功能封装成两个函数,便于调用和维护。
总结
今天我们学习了使用 Python 发送邮件的三种方法:smtplib
模块、yagmail
库和 email
库。每种方法都有其特点和适用场景:
smtplib
模块适合基础的邮件发送需求,适用于简单的文本邮件。yagmail
库简化了邮件发送的过程,适合快速开发和调试。email
库结合smtplib
可以发送复杂的邮件,如包含附件和 HTML 内容的邮件。
通过实战案例,我们还学会了如何结合第三方 API 自动化发送每日天气报告。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!
付费合集推荐
文末福利
公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。