Python邮件附件:使用email.mime.application模块发送带有压缩文件夹附件的邮件
在Python中,可以使用email和smtplib模块来发送邮件。在发送邮件时,如果需要添加附件,可以使用email.mime.application模块来处理附件文件。
首先,要发送邮件,需要创建一个邮件对象。可以通过email.mime.multipart模块的MIMEMultipart类来创建一个带有附件的邮件对象。然后,可以使用email.mime.application模块的MIMEApplication类来创建附件对象。
下面是一个使用email.mime.application模块发送带有压缩文件夹附件的邮件的示例代码:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# 添加邮件附件
def add_attachment(filepath, filename):
with open(filepath, 'rb') as f:
att = MIMEApplication(f.read())
att.add_header('Content-Disposition', 'attachment', filename=filename)
return att
# 发送邮件
def send_email(smtp_server, smtp_port, from_address, password, to_address, subject, body, attachments=[]):
# 创建邮件对象
msg = MIMEMultipart()
msg['From'] = from_address
msg['To'] = ','.join(to_address)
msg['Subject'] = subject
# 添加附件
for attachment in attachments:
att = add_attachment(attachment['filepath'], attachment['filename'])
msg.attach(att)
# 添加邮件正文
msg.attach(MIMEText(body, 'plain'))
# 发送邮件
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(from_address, password)
server.sendmail(from_address, to_address, msg.as_string())
server.quit()
# 邮箱服务器配置
smtp_server = 'smtp.example.com'
smtp_port = 587
# 发件人邮箱配置
from_address = 'sender@example.com'
password = 'password'
# 收件人邮箱配置
to_address = ['recipient1@example.com', 'recipient2@example.com']
# 邮件配置
subject = '邮件主题'
body = '邮件正文'
# 附件配置
attachments = [
{'filepath': 'folder.zip', 'filename': 'folder.zip'}
]
# 发送邮件
send_email(smtp_server, smtp_port, from_address, password, to_address, subject, body, attachments)
在上面的示例代码中,首先定义了一个add_attachment函数,用来创建附件对象。这个函数接受两个参数,一个是附件文件的路径,另一个是附件的文件名。函数会打开附件文件,读取文件内容,并使用MIMEApplication类来创建附件对象。然后,添加附件的文件名和类型,并返回附件对象。
然后,定义了一个send_email函数,用来发送邮件。该函数接受多个参数,包括SMTP服务器地址、SMTP端口号、发件人邮箱、发件人密码、收件人邮箱、邮件主题、邮件正文和附件列表。在函数内部,首先创建了一个MIMEMultipart对象,用来表示邮件。然后,遍历附件列表,调用add_attachment函数来添加附件。接下来,使用SMTP服务器和端口号来创建一个SMTP对象,通过starttls函数启用安全传输,并使用login函数登录发件人邮箱。最后,调用sendmail函数发送邮件,并退出SMTP会话。
最后,使用上述定义的函数,可以发送带有压缩文件夹附件的邮件。在代码中,将SMTP服务器地址、SMTP端口号、发件人邮箱、发件人密码、收件人邮箱、邮件主题、邮件正文和附件列表进行配置,并调用send_email函数来发送邮件。
需要注意的是,对于压缩文件夹附件,需要先将文件夹压缩成一个zip文件,然后将该zip文件作为附件发送。在上面的示例代码中,假设已经将文件夹压缩成名为"folder.zip"的zip文件,并将其路径和文件名配置到附件列表中。
