LPgenerator / django-db-mailer

Django module to easily send emails/sms/tts/push using django templates stored on database and managed through the Django Admin
https://github.com/LPgenerator/django-db-mailer
GNU General Public License v2.0
256 stars 80 forks source link

Проблемы с прикреплением файлов #24

Closed ad-lebedev closed 8 years ago

ad-lebedev commented 8 years ago

Приветствую!
Прикрепляю файл к шаблону в коде:

attachment = MailFile.objects.create(
    template=mail_template,
    name='Request for bill')
attachment.filename.save(
    'Request.xlsx',
    ContentFile(output_file_stream.getvalue()))

Есть 2 проблемы:

  1. Ошибка при сохранении вложения DataError: value too long for type character varying(100) Это ограничение стандартного файлового поля в Django, которая представляет файл в базе в виде varchar(100). Помогло увеличение длины поля в классе MailFile:
filename = models.FileField(_('File'), upload_to=_upload_mail_file, max_length=255)

Я конечно могу просто переопределить этот класс у себя, но мне кажется, проблему можно исправить в Вашем алгоритме генерации имен вложений.

  1. Собственно имена вложений. Вы их программно переопределяете, в результате в письме имя файла а ля d49caadf-c367-4e06-b424-88bd7f0a0aae.xlsx, хотя мне бы хотелось видеть там свое имя, указанное при создании файла.
gotlium commented 8 years ago

Доброго времени суток. Вопрос: зачем вы используете прикрепление файлов к шаблону в БД? У вас эти файлы динамически отправляются для каждого пользователя, или все таки однотипны? Для биллинга в вашем примере нужно использовать стандартные средства при отправке:

# предварительно создаем временный файл: /tmp/request.xlsx
send_db_mail('billing-request', 'user@example.com', files=['/tmp/request.xlsx'])
# удаляем временный файл: /tmp/request.xlsx

и что касается d49caadf-c367-4e06-b424-88bd7f0a0aae.xlsx - эти файлы лежат на fs в /media/, и есть проблемы с кирилицей. потому сделано так. возможно это можно к примеру вынести в конфигурацию, так как для англоязычных пользователей это не страшно. https://github.com/LPgenerator/django-db-mailer/blob/master/dbmail/models.py#L38 в этой функции можно сделать проверку флага и возвращать либо оригинально имя файла, либо uuid.

ad-lebedev commented 8 years ago

"а что, можно было?! 0_0"(с) файлы генерятся динамически для каждого пользователя да, такой способ гораздо проще и приятней.

gotlium commented 8 years ago

нужно смотреть документацию. батарейка много чего умеет на самом деле. посмотрите внимательно апи https://github.com/LPgenerator/django-db-mailer#mail-api то что вы вставляете именно в админке - должно являться статикой. это для всяких писем с инструкциями, промо и тд и тп. и статичные файлы используют uuid. это по идее можно исправить способом в предыдущем комменте.