Python实战:自动发送邮件

本文详细介绍了如何使用Python通过SMTP协议自动化发送邮件,包括环境准备、SMTP库的运用、邮件格式(纯文本、HTML和带附件)、多收件人支持,以及异常处理和定时任务实现。
摘要由CSDN通过智能技术生成

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 = '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()

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 = '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()

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 = '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()

8. 发送多收件人的邮件

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

# 配置多个收件人
receivers = ['receiver1@example.com', 'receiver2@example.com']
# 发送邮件
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 邮件、带附件的邮件、多收件人的邮件,以及如何处理异常和定时发送邮件。

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用selenium结合email模块实现自动发送邮件的功能。以下是一个简单的示例代码: ```python from selenium import webdriver import time import smtplib from email.mime.text import MIMEText from email.header import Header # 邮件发送者和接收者的信息 sender = 'sender@example.com' receiver = 'receiver@example.com' password = 'your_password' # 构建邮件内容 message = MIMEText('这是一封自动发送的邮件', 'plain', 'utf-8') message['From'] = Header(sender, 'utf-8') message['To'] = Header(receiver, 'utf-8') message['Subject'] = Header('自动发送邮件', 'utf-8') # 使用selenium完成登录操作 browser = webdriver.Chrome() browser.get('https://mail.example.com') browser.find_element_by_name('username').send_keys(sender) browser.find_element_by_name('password').send_keys(password) browser.find_element_by_id('login_button').click() time.sleep(1) # 发送邮件 browser.find_element_by_id('compose_button').click() time.sleep(1) browser.find_element_by_name('to').send_keys(receiver) browser.find_element_by_name('subjectbox').send_keys('自动发送邮件') browser.find_element_by_xpath('//div[text()="发送"]').click() time.sleep(1) # 关闭浏览器 browser.quit() # 发送邮件 smtp_server = 'smtp.example.com' smtp_port = 25 smtp_sender = smtplib.SMTP(smtp_server, smtp_port) smtp_sender.login(sender, password) smtp_sender.sendmail(sender, [receiver], message.as_string()) smtp_sender.quit() ``` 需要注意的是,以上示例代码只是一个简单的示例,实际应用中还需要根据具体情况进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值