如何根据用户及其要附加的文件添加多个附件?
Posted
技术标签:
【中文标题】如何根据用户及其要附加的文件添加多个附件?【英文标题】:How do I add multiple attachments depending of the user and their files to attach? 【发布时间】:2021-12-09 08:13:55 【问题描述】:如何在给定此数据框的情况下将多个附件发送到一封电子邮件?每封邮件我只能发送一个文件,但我想在同一封邮件中为一位收件人附加多个文件。
我的数据框看起来像:
我发送电子邮件的代码:
def enviar_mail(from, to, file_name, link, title):
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
import smtplib
from email import encoders
from google.colab import files
from email.utils import formataddr
import email.utils
import time
from datetime import date
msg = MIMEMultipart('alternative')
msg['From'] =email.utils.formataddr(( "Mail",from))
msg['To'] = to
msg['Subject'] = 'Subject'
bodytext=f"BODY OF THE EMAIL IN html"
body=f"""\
<html>
<body>
<p style="color:black;"> bodytext
</p>
</body>
</html>
"""
msg.attach(MIMEText(body, 'html'))
attachment = open(file_name, 'rb')
part = MIMEBase('application', "octet-stream")
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % file_name)
msg.attach(part)
mailserver = smtplib.SMTP('smtp.office365.com',587)
mailserver.ehlo()
mailserver.starttls()
mailserver.login(from, 'mypassword')
mailserver.send_message(msg, rcpt_options=['NOTIFY=SUCCESS,DELAY,FAILURE'])
mailserver.quit()
【问题讨论】:
【参考方案1】:您可以将多个附件作为多个部分附加:
attachment1 = open(file_1, 'rb')
part = MIMEBase('application', "octet-stream")
part.set_payload(attachment1.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % file_1)
msg.attach(part)
attachment2 = open(file_2, 'rb')
part = MIMEBase('application', "octet-stream")
part.set_payload(attachment2.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % file_2)
msg.attach(part)
【讨论】:
嗨。感谢您的回答,但这在我的情况下不起作用,因为这取决于一个用户可以拥有多少个文件。例如,一个可以有 2 个文件,但另一个可以有其他数量。这里的事情是用 .loc[email] 循环数据帧,但我不知道如何使它工作以上是关于如何根据用户及其要附加的文件添加多个附件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用PHPMailer将多个文件附加到两个不同的电子邮件中?
Android - 无法使用 FileProvider 添加电子邮件附件