Размер файла вложения становится 0 (сжатым) в автоматизации электронной почты Python Django, т.е. имя файла отображается, а содержимое вложенного pdf не отображается
Код для отправки электронной почты в Django написан так в файле views.py - он отлично отправляет pdf, если размер файла большой (~3mb), но для меньших файлов (~1 или 2mb) он не отправляет файл (он появляется как файл с нулевым байтом) в электронной почте, и поэтому мы не можем получить к нему доступ. Код приведен ниже. Пожалуйста, дайте мне знать, если есть способ избежать такого сжатия файла и отправлять маленькие файлы на.
def addbeast(request):
if request.method == 'POST':
form = BeastForm(request.POST, request.FILES)
# print("here")
# print(form.cleaned_data['name'])
if form.is_valid():
# print("here")
# print(form.cleaned_data['media'])
form.save()
# media = Beast.objects.get(name = '')
name = form.cleaned_data['name']
media = form.cleaned_data['media']
media.seek(0, os.SEEK_END)
filesize = media.tell()
print(filesize)
subject = "NDA IS Attached"
message = "NDA Attachment from " + name
sender = "-----@gmail.com"
cc_myself = True
cc_mail = "----!!!!!!@gmail.com"
recipients = ['9999999999@gmail.com']
if cc_myself:
recipients.append(cc_mail)
try:
mail = EmailMessage(subject, message, sender, recipients)
mail.attach(media.name, media.read(), media.content_type)
mail.send()
return HttpResponse("FORM SUBMISSION IS SUCCESSFUL")
except:
return HttpResponse('no success')
else:
form = BeastForm()
return render(request, "post_list.html", {
"form": form
})
Пожалуйста, помогите, как можно исправить код, при печати переменного носителя я получаю 'filename.pdf'.
Попробуйте вставить "media.seek(0)" перед строкой "mail.attach(media.name..."
Django использует InMemoryUploadedFile, если длина содержимого меньше FILE_UPLOAD_MAX_MEMORY_SIZE (2.5MB по умолчанию), иначе он использует TemporaryUploadedFile.
Ваш "media.seek(0, os.SEEK_END)" помещает текущую позицию файла в конец. Похоже, что последующая команда read продолжается с текущей позиции для файла в памяти, но начинается с начала для временных файлов.