当前位置:   article > 正文

Python实战:自动发送邮件_python自动发邮件

python自动发邮件

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

8. 发送多收件人的邮件

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

# 配置多个收件人
receivers = ['receiver1@example.com', 'receiver2@example.com']
# 发送邮件
smtp.sendmail(sender, receivers, msg.as_string())
  • 1
  • 2
  • 3
  • 4

9. 异常处理

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

try:
    # 发送邮件
    smtp.sendmail(sender, receiver, msg.as_string())
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件", e)
finally:
    # 关闭连接
    smtp.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

11. 总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/807154
推荐阅读
相关标签
  

闽ICP备14008679号