Skip to content

Commit 9b7d97f

Browse files
authored
Merge pull request #31 from deployed/default_attachments
Sent default attachements together with email template
2 parents c87c4c9 + 720801b commit 9b7d97f

File tree

6 files changed

+64
-6
lines changed

6 files changed

+64
-6
lines changed

README.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ Assumptions
1616
Changelog
1717
=========
1818

19+
1.1.8
20+
-----
21+
* send related attachments together with email templates
22+
1923
1.1.7
2024
-----
2125
* added missing translations [pl]

emailtemplates/email.py

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# coding=utf-8
2-
import os
32
import logging
4-
import six
3+
import os
54
from smtplib import SMTPException
65

76
from django.conf import settings
@@ -109,13 +108,19 @@ def __compile_template(self):
109108
if not self.compiled_template:
110109
self.compiled_template = Template(self.template)
111110

111+
def get_context(self):
112+
self.context.update({
113+
"default_attachments": self.get_default_attachments(as_links=True)
114+
})
115+
return self.context
116+
112117
def render_message(self):
113118
self.__compile_template()
114119
try:
115-
message = self.compiled_template.render(self.context) #
120+
message = self.compiled_template.render(self.get_context()) #
116121
except AttributeError:
117122
# NOTE: for template from string Context() is still required!
118-
message = self.compiled_template.render(Context(self.context))
123+
message = self.compiled_template.render(Context(self.get_context()))
119124
self.message = message
120125

121126
def get_message_object(self, send_to, attachment_paths, *args, **kwargs):
@@ -153,6 +158,25 @@ def send_email(self, send_to, attachment_paths=None, fail_silently=True, *args,
153158

154159
return self.sent
155160

161+
def get_default_attachments(self, as_links=False):
162+
"""
163+
Prepare default attachments data (files will be include into email as attachments)
164+
"""
165+
attachments = []
166+
try:
167+
tmp = self.get_template_object()
168+
except ObjectDoesNotExist:
169+
return attachments
170+
171+
for attachment in tmp.attachments.filter(send_as_link=as_links):
172+
if as_links:
173+
attachments.append(attachment.attachment_file.url)
174+
else:
175+
attachments.append(
176+
(os.path.basename(attachment.attachment_file.name), attachment.attachment_file.read())
177+
)
178+
return attachments
179+
156180
def send(self, to, attachment_paths=None, *args, **kwargs):
157181
"""This function does all the operations on eft object, that are necessary to send email.
158182
Usually one would use eft object like this:
@@ -162,9 +186,12 @@ def send(self, to, attachment_paths=None, *args, **kwargs):
162186
eft.send_email(['[email protected]'])
163187
return eft.sent
164188
"""
189+
attachments = self.get_default_attachments(as_links=False)
190+
attachments.extend(kwargs.get('attachments', []))
191+
165192
self.get_object()
166193
self.render_message()
167-
self.send_email(to, attachment_paths, *args, **kwargs)
194+
self.send_email(to, attachment_paths, attachments=attachments, *args, **kwargs)
168195
if self.sent:
169196
logger.info(u"Mail has been sent to: %s ", to)
170197
return self.sent

emailtemplates/locale/pl/LC_MESSAGES/django.po

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ msgstr "Pokaż podgląd wiadomości"
2828
msgid "Actions"
2929
msgstr "Akcje"
3030

31+
msgid "Send as link"
32+
msgstr "Wyślij jako link"
33+
3134
#: emailtemplates/apps.py:8
3235
msgid "E-MAIL TEMPLATES"
3336
msgstr "Szblony wiadomości E-mail"
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Generated by Django 3.1.2 on 2020-11-20 10:56
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('emailtemplates', '0007_auto_20201113_1354'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='emailattachment',
15+
name='send_as_link',
16+
field=models.BooleanField(default=True, verbose_name='Send as link'),
17+
),
18+
migrations.AddField(
19+
model_name='massemailattachment',
20+
name='send_as_link',
21+
field=models.BooleanField(default=True, verbose_name='Send as link'),
22+
),
23+
]

emailtemplates/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def save(self, *args, **kwargs):
5656
class BaseEmailAttachment(models.Model):
5757
name = models.CharField(_("name"), blank=True, max_length=50)
5858
attachment_file = models.FileField(_(u"Attachment file"), upload_to="emails/attachments/")
59+
send_as_link = models.BooleanField(verbose_name=_("Send as link"), default=True)
5960

6061
class Meta:
6162
abstract = True

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
setup(
1818
name='django-emailtemplates',
19-
version='1.1.7',
19+
version='1.1.8',
2020
packages=find_packages(),
2121
include_package_data=True,
2222
license='MIT License',

0 commit comments

Comments
 (0)