diff --git a/AKPlanning/settings.py b/AKPlanning/settings.py
index 11d1348867306f65cb288d0d3d0563eecef290f8..3202b7d3e5fae76eedc4b801da00cdd06a12114b 100644
--- a/AKPlanning/settings.py
+++ b/AKPlanning/settings.py
@@ -218,4 +218,8 @@ CSP_IMG_SRC = ("'self'", "data:")
 CSP_FRAME_SRC = ("'self'", )
 CSP_FONT_SRC = ("'self'", "data:", "fonts.gstatic.com")
 
+# Emails
+SEND_MAILS = True
+EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
+
 include(optional("settings/*.py"))
diff --git a/AKPlanning/settings_production.py b/AKPlanning/settings_production.py
index 83d7842d50fe525d3f86aa6b1c5fd145ddda417a..bf84d435232e27c0b1c7c48f8c7477a9de6da87f 100644
--- a/AKPlanning/settings_production.py
+++ b/AKPlanning/settings_production.py
@@ -35,4 +35,8 @@ DATABASES = {
     }
 }
 
+### EMAILS ###
+SEND_MAILS = True
+EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
+
 # TODO: caching
diff --git a/AKSubmission/models.py b/AKSubmission/models.py
index 6b2021999398416a78191ac543b7e0e34d86bc2c..cd8a855b735c823a304a3b78c68f28efd42dc9a9 100644
--- a/AKSubmission/models.py
+++ b/AKSubmission/models.py
@@ -1 +1,42 @@
-# Create your models here.
+from django.apps import apps
+from django.conf import settings
+from django.core.mail import EmailMessage
+from django.db.models.signals import post_save
+from django.dispatch import receiver
+from django.urls import reverse_lazy
+
+from AKModel.models import AKOrgaMessage, AKSlot
+
+
+@receiver(post_save, sender=AKOrgaMessage)
+def orga_message_saved_handler(sender, instance: AKOrgaMessage, created, **kwargs):
+    # React to newly created Orga message by sending an email
+
+    if created and settings.SEND_MAILS:
+        host = 'https://' + settings.ALLOWED_HOSTS[0] if len(settings.ALLOWED_HOSTS) > 0 else 'http://127.0.0.1:8000'
+        url = f"{host}{reverse_lazy('submit:ak_detail', kwargs={'pk': instance.ak.pk, 'event_slug': instance.ak.event.slug})}"
+
+        mail = EmailMessage(
+            f"[AKPlanning] New message for AK '{instance.ak}' ({instance.ak.event})",
+            f"{instance.text}\n\n{url}",
+            settings.DEFAULT_FROM_EMAIL,
+            [instance.ak.event.contact_email]
+        )
+        mail.send(fail_silently=True)
+
+
+@receiver(post_save, sender=AKSlot)
+def slot_created_handler(sender, instance: AKSlot, created, **kwargs):
+    # React to slots that are created after the plan was already published by sending an email
+
+    if created and settings.SEND_MAILS and apps.is_installed("AKPlan") and not instance.event.plan_hidden and instance.room is None and instance.start is None:
+        host = 'https://' + settings.ALLOWED_HOSTS[0] if len(settings.ALLOWED_HOSTS) > 0 else 'http://127.0.0.1:8000'
+        url = f"{host}{reverse_lazy('submit:ak_detail', kwargs={'pk': instance.ak.pk, 'event_slug': instance.ak.event.slug})}"
+
+        mail = EmailMessage(
+            f"[AKPlanning] New slot for AK '{instance.ak}' ({instance.ak.event}) added",
+            f"New slot requested.\n\nAK: {instance.ak}\nDuration: {instance.duration}\n\n{url}",
+            settings.DEFAULT_FROM_EMAIL,
+            [instance.ak.event.contact_email]
+        )
+        mail.send(fail_silently=True)