Django电子邮件附件的文件上传

时间:2015-10-23 13:14:35

标签: django

我正在尝试将文件附加到电子邮件中。该文件由用户上传并放入媒体文件夹。

我尝试了两种方法。

首先:

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')

这给了我一个找不到的页面。如果我从错误中复制网址虽然它将我带到文件。我认为这是因为字符串格式

而发生的

3 个答案:

答案 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)