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发送带附件的邮件有所帮助。