Python实战:自动发送邮件

您所在的位置:网站首页 发邮件需要写日期吗 Python实战:自动发送邮件

Python实战:自动发送邮件

2024-07-07 06:43| 来源: 网络整理| 查看: 265

1. 引言

在日常生活和工作中,我们经常需要发送邮件来通知、提醒或分享信息。手动发送邮件虽然简单,但效率低下,且容易出错。因此,掌握自动发送邮件的技能显得尤为重要。本文将详细介绍如何使用 Python 自动发送邮件,让我们轻松应对各种邮件发送场景。

2. 环境准备

在开始编写自动发送邮件的脚本之前,我们需要准备以下环境: 1)Python 环境:确保我们的计算机上已安装 Python,本文使用 Python 3.x 版本进行讲解。 2)邮箱账号:准备一个邮箱账号,用于发送邮件。本文以 QQ 邮箱为例进行讲解。 3)邮箱授权码:获取邮箱授权码,用于登录邮箱。不同邮箱的授权码获取方式略有差异,请参考相关邮箱的帮助文档。

3. SMTP 协议

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送电子邮件的协议。Python 的 smtplib 库提供了 SMTP 客户端会话,可以用来发送邮件。

4. 邮件格式

电子邮件通常由三部分组成:邮件头、邮件体和附件。邮件头包括发件人、收件人、主题等信息;邮件体是邮件的内容,可以是纯文本或 HTML 格式;附件是邮件携带的文件。

5. 发送邮件

使用 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 = '[email protected]' receiver = '[email protected]' 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() 6. 发送 HTML 邮件

发送 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 = '[email protected]' receiver = '[email protected]' password = 'your_email_password' # 创建 SMTP 对象 smtp = smtplib.SMTP_SSL(smtp_server, smtp_port) # 登录邮箱 smtp.login(sender, password) # 设置邮件内容 subject = 'Python 自动发送 HTML 邮件测试' body = ''' Python 自动发送邮件 这是一封来自 Python 脚本的自动发送邮件。

这封邮件使用了 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() 7. 发送带附件的邮件

发送带附件的邮件需要使用 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 = '[email protected]' receiver = '[email protected]' 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() 8. 发送多收件人的邮件

在发送邮件时,有时需要将邮件发送给多个收件人。这时,可以将多个收件人的邮箱地址以列表的形式传递给 sendmail 方法。下面是一个发送多收件人邮件的示例:

# 配置多个收件人 receivers = ['[email protected]', '[email protected]'] # 发送邮件 smtp.sendmail(sender, receivers, msg.as_string()) 9. 异常处理

在实际应用中,发送邮件可能会遇到各种异常,例如网络问题、邮箱服务器问题等。为了确保脚本的健壮性,我们需要对可能出现的异常进行处理。Python 的 try-except 语句可以用来捕获和处理异常。下面是一个添加异常处理的示例:

try: # 发送邮件 smtp.sendmail(sender, receiver, msg.as_string()) print("邮件发送成功") except smtplib.SMTPException as e: print("Error: 无法发送邮件", e) finally: # 关闭连接 smtp.quit() 10. 定时发送邮件

在某些场景下,我们可能需要定时发送邮件,例如每天早上发送天气预报。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) 11. 总结

本文详细介绍了如何使用 Python 编写自动发送邮件的脚本。通过学习 SMTP 协议、邮件格式、邮件发送等核心知识,并掌握 smtplib 和 email 库的使用,我们现在可以轻松实现自动发送邮件功能。此外,我们还介绍了如何发送 HTML 邮件、带附件的邮件、多收件人的邮件,以及如何处理异常和定时发送邮件。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3