我正在尝试使用Django发送带附件的邮件,附件从用户提交的表单发送到服务器。我的代码如下所示
form = RequestForm(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.info(request, '')
subject = ''
message = ""
attachment = request.FILES['attachment']
mail = EmailMessage(subject, message, '', [''])
mail.attach(filename=attachment.name, mimetype=attachment.content_type, content=attachment.read())
mail.send()
我收到邮件,但邮件中的附件是空白的,即它不包含任何内容。我在这里缺少什么?
答案 0 :(得分:1)
我已经解决了这个问题,我将form.save()放在底部,即发送邮件后问题解决了。这是因为,一旦我们使用form.save(),附件就会存储在它的路径中,我们需要在读取它之前打开它。
form = RequestForm(request.POST, request.FILES)
if form.is_valid():
messages.info(request, '')
subject = ''
message = ""
attachment = request.FILES['attachment']
mail = EmailMessage(subject, message, '', [''])
mail.attach(filename=attachment.name, mimetype=attachment.content_type, content=attachment.read())
mail.send()
form.save()
答案 1 :(得分:0)
我相信你需要使用attach_file而不是attach。 attach_file允许您传递路径,而您需要使用attach传递实际数据。请参阅docs。
另外,请测试您的附件是否实际上传,您在表单上指定了正确的enctype等。例如:
<form enctype="multipart/form-data" action="/whatever/" method="post">