gpt4 book ai didi

python - 使用相同的附件在 Django 中发送批量电子邮件

转载 作者:行者123 更新时间:2023-11-28 19:27:38 25 4
gpt4 key购买 nike

我想向要参加 session 的站点成员(即 guest )发送电子邮件,每封电子邮件都带有(相同的)PDF 附件。我在 connection.send_messages(messages) 中使用 Django 的内置批量电子邮件功能来执行此操作。目前我正在这样做:

guests = Guest.objects.all()
connection = mail.get_connection()
connection.open()
messages = []
for guest in guests:
msg = EmailMultiAlternatives(title, text_content, from_address, [guest.email], connection=connection)
msg.attach_alternative(html_content, 'text/html')
pdf_data = open(os.path.join(settings.MEDIA_ROOT, 'uploads/flyer.pdf'))
msg.attach('Invitation Card.pdf', pdf_data.read(), 'application/pdf')
pdf_data.close()
messages.append(msg)
connection.send_messages(messages)
connection.close()

现在,当我这样做时,将为每封电子邮件加载相同的 PDF 文件,分别附加,然后为每封电子邮件分别发送,就好像它们是不同的 PDF 一样。如果文件是 10MB,那么这 10MB 将被上传到我的邮件服务器,供每位客人使用,而它可能只上传一次。

所以问题是:是否可以一次将文件附加到所有电子邮件,从而也只上传一次?还是我只是做错了?

更新:

如果我将附加行更改为以下内容:

msg.attach_file(os.path.join(settings.MEDIA_ROOT, 'uploads/flyer.pdf'))

这能解决我的问题吗?

最佳答案

查看 django/core/mail/message.py 显示 attach_file 只是一个方便的函数,它在调用 attach 之前为您打开文件:

def attach_file(self, path, mimetype=None):
"""Attaches a file from the filesystem."""
filename = os.path.basename(path)
content = open(path, 'rb').read()
self.attach(filename, content, mimetype)

如果继承 EmailMultiAlternatives 并覆盖 attach 方法,就可以避免打开附件并一遍又一遍地将其读入内存。您应该考虑为此使用作业/任务队列 celery .

关于python - 使用相同的附件在 Django 中发送批量电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com