赞
踩
在日常生活和工作中,我们经常需要发送邮件来通知、提醒或分享信息。手动发送邮件虽然简单,但效率低下,且容易出错。因此,掌握自动发送邮件的技能显得尤为重要。本文将详细介绍如何使用 Python 自动发送邮件,让我们轻松应对各种邮件发送场景。
在开始编写自动发送邮件的脚本之前,我们需要准备以下环境:
1)Python 环境:确保我们的计算机上已安装 Python,本文使用 Python 3.x 版本进行讲解。
2)邮箱账号:准备一个邮箱账号,用于发送邮件。本文以 QQ 邮箱为例进行讲解。
3)邮箱授权码:获取邮箱授权码,用于登录邮箱。不同邮箱的授权码获取方式略有差异,请参考相关邮箱的帮助文档。
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送电子邮件的协议。Python 的 smtplib 库提供了 SMTP 客户端会话,可以用来发送邮件。
电子邮件通常由三部分组成:邮件头、邮件体和附件。邮件头包括发件人、收件人、主题等信息;邮件体是邮件的内容,可以是纯文本或 HTML 格式;附件是邮件携带的文件。
使用 Python 发送邮件的步骤如下:
1)导入 smtplib 和 email 库。
2)创建 SMTP 对象,并连接到邮箱服务器。
3)登录邮箱。
4)设置邮件头、邮件体和附件。
5)发送邮件。
6)关闭连接。
下面是一个发送纯文本邮件的示例:
import smtplib from email.mime.text import MIMEText from email.header import Header # 配置邮箱服务器信息 smtp_server = 'smtp.qq.com' smtp_port = 465 # 配置发件人和收件人信息 sender = 'your_email@qq.com' receiver = 'receiver_email@example.com' password = 'your_email_password' # 创建 SMTP 对象 smtp = smtplib.SMTP_SSL(smtp_server, smtp_port) # 登录邮箱 smtp.login(sender, password) # 设置邮件内容 subject = 'Python 自动发送邮件测试' body = '这是一封来自 Python 脚本的自动发送邮件。' msg = MIMEText(body, 'plain', 'utf-8') msg['From'] = Header(sender, 'utf-8') msg['To'] = Header(receiver, 'utf-8') msg['Subject'] = Header(subject, 'utf-8') # 发送邮件 smtp.sendmail(sender, receiver, msg.as_string()) # 关闭连接 smtp.quit()
发送 HTML 邮件的方法与发送纯文本邮件类似,只需将邮件体的类型设置为 HTML。下面是一个发送 HTML 邮件的示例:
import smtplib from email.mime.text import MIMEText from email.header import Header # 配置邮箱服务器信息 smtp_server = 'smtp.qq.com' smtp_port = 465 # 配置发件人和收件人信息 sender = 'your_email@qq.com' receiver = 'receiver_email@example.com' password = 'your_email_password' # 创建 SMTP 对象 smtp = smtplib.SMTP_SSL(smtp_server, smtp_port) # 登录邮箱 smtp.login(sender, password) # 设置邮件内容 subject = 'Python 自动发送 HTML 邮件测试' body = ''' <html> <head> <title>Python 自动发送邮件</title> </head> <body> <h1>这是一封来自 Python 脚本的自动发送邮件。</h1> <p>这封邮件使用了 HTML 格式。</p> </body> </html> ''' msg = MIMEText(body, 'html', 'utf-8') msg['From'] = Header(sender, 'utf-8') msg['To'] = Header(receiver, 'utf-8') msg['Subject'] = Header(subject, 'utf-8') # 发送邮件 smtp.sendmail(sender, receiver, msg.as_string()) # 关闭连接 smtp.quit()
发送带附件的邮件需要使用 email 库的 MIMEMultipart 类,将邮件体和附件添加到邮件中。下面是一个发送带附件的邮件的示例:
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders # 配置邮箱服务器信息 smtp_server = 'smtp.qq.com' smtp_port = 465 # 配置发件人和收件人信息 sender = 'your_email@qq.com' receiver = 'receiver_email@example.com' password = 'your_email_password' # 创建 SMTP 对象 smtp = smtplib.SMTP_SSL(smtp_server, smtp_port) # 登录邮箱 smtp.login(sender, password) # 创建邮件对象 msg = MIMEMultipart() msg['From'] = Header(sender, 'utf-8') msg['To'] = Header(receiver, 'utf-8') msg['Subject'] = Header('Python 自动发送带附件的邮件测试', 'utf-8') # 邮件正文内容 body = '这是一封来自 Python 脚本的自动发送邮件,邮件中包含附件。' msg.attach(MIMEText(body, 'plain', 'utf-8')) # 附件内容 att_file = open('example.pdf', 'rb') # 附件文件路径 att = MIMEBase('application', 'octet-stream') att.set_payload(att_file.read()) att_file.close() encoders.encode_base64(att) att.add_header('Content-Disposition', 'attachment; filename="example.pdf"') msg.attach(att) # 发送邮件 smtp.sendmail(sender, receiver, msg.as_string()) # 关闭连接 smtp.quit()
在发送邮件时,有时需要将邮件发送给多个收件人。这时,可以将多个收件人的邮箱地址以列表的形式传递给 sendmail
方法。下面是一个发送多收件人邮件的示例:
# 配置多个收件人
receivers = ['receiver1@example.com', 'receiver2@example.com']
# 发送邮件
smtp.sendmail(sender, receivers, msg.as_string())
在实际应用中,发送邮件可能会遇到各种异常,例如网络问题、邮箱服务器问题等。为了确保脚本的健壮性,我们需要对可能出现的异常进行处理。Python 的 try-except
语句可以用来捕获和处理异常。下面是一个添加异常处理的示例:
try:
# 发送邮件
smtp.sendmail(sender, receiver, msg.as_string())
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
finally:
# 关闭连接
smtp.quit()
在某些场景下,我们可能需要定时发送邮件,例如每天早上发送天气预报。Python 的 schedule
库可以用来实现定时任务。下面是一个使用 schedule
库定时发送邮件的示例:
import schedule
import time
# 定义发送邮件的函数
def send_email():
# ... 发送邮件的代码 ...
# 设置定时任务
schedule.every().day.at("08:00").do(send_email)
# 循环检查是否有定时任务需要执行
while True:
schedule.run_pending()
time.sleep(1)
本文详细介绍了如何使用 Python 编写自动发送邮件的脚本。通过学习 SMTP 协议、邮件格式、邮件发送等核心知识,并掌握 smtplib 和 email 库的使用,我们现在可以轻松实现自动发送邮件功能。此外,我们还介绍了如何发送 HTML 邮件、带附件的邮件、多收件人的邮件,以及如何处理异常和定时发送邮件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。