Отправка различных вложенных файлов, таких как изображения, 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()