我正在尝试将文件附加到电子邮件中。该文件由用户上传并放入媒体文件夹。
我尝试了两种方法。
首先:
def email_view(request, pk):
person = Person.objects.get(pk=pk)
email_to = person.email
email = EmailMessage(
'Subject here', 'Here is the message.', 'email@email.com', [email_to])
email.attach_file(person.upload)
email.send()
return redirect('home')
这给了我一个错误'FieldFile' object has no attribute 'rfind'
第二
def email_view(request, pk):
person = Person.objects.get(pk=pk)
email_to = person.email
attachment = str(person.upload)
attachment = 'http://my_site:8080/media/' + attachment.replace('./', '')
email = EmailMessage(
'Subject here', 'Here is the message.', 'email@email.com', [email_to])
email.attach_file(attachment)
email.send()
return redirect('home')
这给了我一个找不到的页面。如果我从错误中复制网址虽然它将我带到文件。我认为这是因为字符串格式
而发生的答案 0 :(得分:1)
您收到此错误是因为您将FileField对象传递给attach_file方法,而不是文件路径。尝试将其更改为:
email.attach_file(person.upload.file.name)
答案 1 :(得分:1)
我有找不到文件的相同错误。这是我使用的调整:
from django.conf import settings
import os
filename = os.path.join(settings.MEDIA_ROOT, person.upload.file.name)
email.attach_file(filename)
答案 2 :(得分:0)
这是一个更清洁的解决方案。路径已经包含文件的绝对路径,因此无需执行os.joins或其他串联操作
email.attach_file(person.upload.file.path)