python实现发送带附件的邮件代码分享

1. 简介

发送带附件的邮件在实际应用中非常常见,特别是在需要发送文件或者报告的情况下。Python提供了强大的邮件库smtplib和email,可以方便地实现发送带附件的邮件功能。

2. 准备工作

在使用smtplib和email库发送邮件之前,我们需要先安装这两个库。

pip install smtplib

pip install email

安装完成后,我们可以开始编写发送带附件的邮件的代码了。

3. 编写代码

3.1 导入所需库

我们首先需要导入smtplib和email库。smtplib用于发送邮件,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

3.2 配置邮箱和密码

接下来,我们需要配置发件人的邮箱地址和密码。请将sender_email替换为你自己的邮箱地址,sender_password替换为你自己的邮箱密码。

sender_email = "your_email@example.com"

sender_password = "your_password"

3.3 构建邮件对象

使用MIMEMultipart类构建表示邮件的对象,可以添加附件,设置标题等。

msg = MIMEMultipart()

3.4 设置发件人、收件人和主题

我们需要设置发件人、收件人和主题。请将recipient_email替换为你需要发送邮件的收件人邮箱地址,subject替换为邮件的主题。

msg['From'] = sender_email

msg['To'] = recipient_email

msg['Subject'] = subject

3.5 添加正文

通过MIMEText类添加邮件的正文内容。在正文中我们可以使用HTML标记来设置格式。

body = "这是一封带附件的邮件。请查收。"

msg.attach(MIMEText(body, 'plain'))

3.6 添加附件

我们可以通过MIMEBase类添加附件。首先需要读取文件内容,然后使用encoders模块将文件编码为Base64格式。

attachment = open("path_to_attachment", "rb")

p = MIMEBase('application', 'octet-stream')

p.set_payload((attachment).read())

encoders.encode_base64(p)

p.add_header('Content-Disposition', "attachment; filename=filename")

msg.attach(p)

3.7 发送邮件

最后,我们使用smtplib库中的SMTP对象登录发件人的邮箱并发送邮件。

server = smtplib.SMTP('smtp.example.com', 587)

server.starttls()

server.login(sender_email, sender_password)

server.sendmail(sender_email, recipient_email, msg.as_string())

server.quit()

4. 完整代码示例

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_email = "your_email@example.com"

sender_password = "your_password"

recipient_email = "recipient@example.com"

subject = "带附件的邮件"

msg = MIMEMultipart()

msg['From'] = sender_email

msg['To'] = recipient_email

msg['Subject'] = subject

body = "这是一封带附件的邮件。请查收。"

msg.attach(MIMEText(body, 'plain'))

attachment = open("path_to_attachment", "rb")

p = MIMEBase('application', 'octet-stream')

p.set_payload((attachment).read())

encoders.encode_base64(p)

p.add_header('Content-Disposition', "attachment; filename=filename")

msg.attach(p)

server = smtplib.SMTP('smtp.example.com', 587)

server.starttls()

server.login(sender_email, sender_password)

server.sendmail(sender_email, recipient_email, msg.as_string())

server.quit()

5. 总结

通过使用smtplib和email库,我们可以很方便地实现发送带附件的邮件。需要注意的是,邮件的正文可以支持HTML标记,附件需要使用MIMEBase类添加并编码为Base64格式。

希望本文对你理解和使用Python发送带附件的邮件有所帮助。

后端开发标签