Отправка различных вложенных файлов, таких как изображения, pdf, аудиофайлы, видеофайлы и zip-файлы, по электронной почте в Django

У меня есть платформа (сайт электронной коммерции), где я загружаю различные типы файлов, а затем отправляю их пользователям на основе запросов по электронной почте. Я пробовал, но получил следующую ошибку:

FileNotFoundError at /some-url/[Errno 2] No such file or directory: 'http://127.0.0.1:8000/media/book_file/selfish_gene.pdf'

Я получил некоторую помощь по поводу отправки pdf файлов по электронной почте, но она также не работает. Я буду благодарен за любое руководство и помощь заранее относительно отправки других файлов, таких как аудио, фото и видео по электронной почте в Django.

Ниже я привожу фрагмент кода. Надеюсь, это поможет.

Модель:

class Book(models.Model):
 title           = models.CharField(max_length=255)
 author           = models.CharField(max_length=255)
 isbn           = models.CharField(max_length=255)
 page           = models.IntegerField(null=True, blank=True)


class BookFiles(models.Model):
 book = models.ForeignKey(Book, null=True, on_delete=models.SET_NULL)
 file = models.FileField(upload_to='book_file/', null=True, blank=True)

Вид:

def send_book(request):
 message = 'body of this email'
 subject= 'the subject of this email'
 recipient_email = 'customer@example.com'
 from_email = 'platformemail@example.com'
 email=EmailMessage(subject,message,from_email,[recipient_email])
 email.content_subtype='html'
 
 the_domain = request.build_absolute_uri('/')[:-1]
 book_object = Book.objects.get(title='Selfish Gene').bookfiles_set.all().first().file.url
 the_file=open(f'{the_domain}{book_object}',"r")
 email.attach("file_name.pdf", the_file.read(),'application/pdf')

 email.send()

Установили ли вы в файле settings.py параметр MEDIA_ROOT на абсолютный путь к месту расположения файлов на диске? И, если да, то какой?

В качестве справочника по настройкам медиа в Django посмотрите эту статью: https://testdriven.io/blog/django-static-files/#media-files

просто удалите .url из book_object и отправьте book_object.read()

def send_book(request):
    subject= 'the subject of this email'
    message = 'body of this email'
    recipient_email = 'customer@example.com'
    from_email = 'platformemail@example.com'
    email=EmailMessage(subject,message,from_email,[recipient_email])
    email.content_subtype='html'

    # the_domain = request.build_absolute_uri('/')[:-1]
    book_object = Book.objects.get(title='Selfish Gene').bookfiles_set.all().first().file
    # the_file=open(f'{the_domain}{book_object}',"r")
    email.attach("file_name.pdf", book_object.read(),'application/pdf')

    email.send()

Вернуться на верх