Repository: watchdogpolska/feder

Issue:
Sposób wysyłania załączników poprzez "Wiadomość masową"
Lasy i Obywatele napotkały problem z wnioskami do nadleśnictw, polegający na zakwestionowaniu mejlowej formy wniosku, jako nie dającej pewności doręczenia. Doszło więc do ponownej wysyłki z załączeniem elektronicznie podpisanego PDFa i jego skompresowanej wersji. Niestety tym razem nadlleśnictwa zgłaszają, że załączniki widzą, jako linki a ich informatycy zabraniają takich kilkać ze względów bezpieczeństwa. W związku z tym nasuwają się następujące pytania:

1. Czy tak jest w istocie, że załączniki do wiadomości wychodzą z Fedrowania, jako linki?
2. Czy jest racjonalnym dodać opcjonalną możliwość załączania załączników, jako faktycznych załączników?
3. Czy jest jakiś sposób, żeby doraźnie, jednorazowo, przez jakąś zmianę w konfiguracji, wymusić wysyłkę realnych załączników (to byłoby niecałe 300 KB do 321 nadleśnictw)?

Chodzi o te załączniki dodawane tutaj: https://fedrowanie.siecobywatelska.pl/monitoringi/udzial-gmin-w-ochronie-lasow-2/~wiadomosc-masowa
![obraz](https://user-images.githubusercontent.com/33778688/155523417-fd23aebf-d7dc-4a15-a4f8-0280a7a6b2bc.png)





Discussion:
1/ Tak. Uwzględniając #1069 możesz pobrać kopie każdej wysłanej przez nas wiadomości.
2/ Możliwe.
3/ Nie ma takiej możliwości w Fedrowaniu obecnie. Wymaga to zmiany w logice wysyłki. Dokładniej to w tym pliku https://github.com/watchdogpolska/feder/blob/857f0b28e34f0ced9f74cf35770e25b151f1c8d5/feder/letters/models.py#L253-L270 . 

A także plikach tu wskazanych:

https://github.com/watchdogpolska/feder/blob/857f0b28e34f0ced9f74cf35770e25b151f1c8d5/feder/letters/models.py#L249-L250

Resolving patch:
diff --git a/feder/letters/models.py b/feder/letters/models.py
--- a/feder/letters/models.py
+++ b/feder/letters/models.py
@@ -238,7 +238,6 @@ def _email_context(self):
             "body": body,
             "footer": self.case.monitoring.email_footer,
             "quote": email_wrapper(self.quote),
-            "attachments": self.attachment_set.all(),
         }
 
     def body_with_footer(self):
@@ -265,6 +264,10 @@ def _construct_message(self, msg_id=None):
             to=[self.case.institution.email],
             body=txt_content,
             headers=headers,
+            attachments=[
+                (att.filename, att.attachment.file.read(), "application/octet-stream")
+                for att in self.attachment_set.all()
+            ],
         )
         msg.attach_alternative(html_content, "text/html")
         return msg


Test patch:
diff --git a/feder/letters/tests/test_views.py b/feder/letters/tests/test_views.py
--- a/feder/letters/tests/test_views.py
+++ b/feder/letters/tests/test_views.py
@@ -250,7 +250,7 @@ def test_send_reply(self):
         self.assertEqual(len(mail.outbox), 1)
         new_letter = Letter.objects.filter(title="Lorem").get()
         new_attachment = new_letter.attachment_set.get()
-        self.assertIn(new_attachment.get_full_url(), mail.outbox[0].body)
+        self.assertEqual(mail.outbox[0].attachments[0][0], new_attachment.filename)
         self.assertEqual(Record.objects.count(), 3)
 
     def test_no_send_drafts(self):