diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMail.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMail.java
deleted file mode 100644
index 54b8da8782..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMail.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.mail.MailEvent;
-import se.su.dsv.scipro.system.DomainObject;
-import se.su.dsv.scipro.system.User;
-
-import jakarta.persistence.*;
-import java.util.Objects;
-
-@Entity
-@Table(name = "forum_mail")
-@Inheritance(strategy = InheritanceType.JOINED)
-public class ForumMail extends DomainObject {
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @ManyToOne(optional = false)
-    private MailEvent mailEvent;
-
-    @ManyToOne(optional = false)
-    private User user;
-
-    protected ForumMail(){} // JPA
-
-    protected ForumMail(final MailEvent mailEvent, final User user) {
-        this.mailEvent = mailEvent;
-        this.user = user;
-    }
-
-    @Override
-    public Long getId() {
-        return this.id;
-    }
-
-    public MailEvent getMailEvent() {
-        return this.mailEvent;
-    }
-
-    public User getUser() {
-        return this.user;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public void setMailEvent(MailEvent mailEvent) {
-        this.mailEvent = mailEvent;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    @Override
-    public String toString() {
-        return "ForumMail(id=" + this.getId() + ", mailEvent=" + this.getMailEvent() + ", user=" + this.getUser() + ")";
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (o == this) return true;
-        if (!(o instanceof ForumMail)) return false;
-        final ForumMail other = (ForumMail) o;
-        return other.canEqual(this)
-                && super.equals(o)
-                && Objects.equals(this.getId(), other.getId())
-                && Objects.equals(this.getMailEvent(), other.getMailEvent())
-                && Objects.equals(this.getUser(), other.getUser());
-    }
-
-    protected boolean canEqual(final Object other) {
-        return other instanceof ForumMail;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(this.getId(), this.getMailEvent(), this.getUser());
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailFormatter.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailFormatter.java
deleted file mode 100644
index 1776c204af..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailFormatter.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-
-public interface ForumMailFormatter {
-    String formatBody(ForumThread forumThread);
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailFormatterImpl.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailFormatterImpl.java
deleted file mode 100644
index 2f009dd369..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailFormatterImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import se.su.dsv.scipro.forum.dataobjects.ForumPost;
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-
-import jakarta.mail.MessagingException;
-import jakarta.mail.Multipart;
-import jakarta.mail.Part;
-import java.io.IOException;
-import java.util.ListIterator;
-
-public class ForumMailFormatterImpl implements MailContentParser, ForumMailFormatter {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ForumMailFormatterImpl.class);
-    public static final String DELIMITER = "---------------- REPLY ABOVE THIS LINE ----------------";
-
-    @Override
-    public String format(Part message) {
-        try {
-            String messageBody = checkMimeType(message);
-            return messageBody != null ?
-                    substringOnDelimiter(messageBody) : "";
-        } catch (MessagingException | IOException e) {
-            LOGGER.error(e.getMessage(), e);
-            return "";
-        }
-    }
-
-    private String substringOnDelimiter(String str) {
-        int delimiter = str.indexOf(DELIMITER);
-        if (delimiter >= 0) {
-            return str.substring(0, delimiter);
-        }
-        return str;
-    }
-
-    protected String checkMimeType(Part message) throws
-            MessagingException, IOException {
-        if (message.isMimeType("text/*")) {
-            return (String) message.getContent();
-        }
-        if (message.isMimeType("multipart/*")) {
-            Multipart mp = (Multipart) message.getContent();
-            for (int i = 0; i < mp.getCount(); i++) {
-                Part bp = mp.getBodyPart(i);
-                if (bp.isMimeType("text/plain")) {
-                    return checkMimeType(bp);
-                }
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public String formatBody(ForumThread forumThread) {
-        StringBuilder content = new StringBuilder(DELIMITER);
-        content.append("\n\n");
-        int nesting = 0;
-        ListIterator<ForumPost> posts = forumThread.getPosts().listIterator(forumThread.getPostCount());
-        while (posts.hasPrevious()) {
-            ForumPost forumPost = posts.previous();
-            String before = ">".repeat(nesting) + (nesting > 0 ? ' ' : "");
-            content.append(before).append(getPosterName(forumPost)).append(":\n");
-            content.append(before).append(forumPost.getContent()).append('\n');
-            content.append(before).append('\n');
-            nesting++;
-        }
-        content.append("\n\n");
-        return content.toString();
-    }
-
-    private String getPosterName(ForumPost forumPost) {
-        if (forumPost.getPostedBy() != null) {
-            return forumPost.getPostedBy().getFullName();
-        }
-        else {
-            return "SciPro";
-        }
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailGroup.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailGroup.java
deleted file mode 100644
index 8ac70b9b1b..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailGroup.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.forum.dataobjects.GroupThread;
-import se.su.dsv.scipro.mail.MailEvent;
-import se.su.dsv.scipro.system.User;
-
-import jakarta.persistence.Entity;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-import java.util.Objects;
-
-@Entity
-@Table(name = "forum_mail_group")
-public class ForumMailGroup extends ForumMail {
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "group_thread_id")
-    private GroupThread groupThread;
-
-    protected ForumMailGroup() {}
-
-    public ForumMailGroup(final MailEvent mailEvent, final User user, final GroupThread groupThread) {
-        super(mailEvent, user);
-        this.groupThread = groupThread;
-    }
-
-    public void setGroupThread(GroupThread groupThread) {
-        this.groupThread = groupThread;
-    }
-
-    public GroupThread getGroupThread() {
-        return groupThread;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (o == this) return true;
-        if (!(o instanceof ForumMailGroup)) return false;
-        final ForumMailGroup other = (ForumMailGroup) o;
-        return other.canEqual(this)
-                && super.equals(o)
-                && Objects.equals(this.getGroupThread(), other.getGroupThread());
-    }
-
-    @Override
-    protected boolean canEqual(final Object other) {
-        return other instanceof ForumMailGroup;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(this.getGroupThread());
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailMessage.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailMessage.java
deleted file mode 100644
index d210897b06..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailMessage.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import java.util.Collection;
-
-public class ForumMailMessage {
-    private final String inReplyTo;
-    private final String mailBody;
-    private final Collection<MailAttachment> attachments;
-
-    public ForumMailMessage(String inReplyTo, String mailBody, final Collection<MailAttachment> attachments) {
-        this.inReplyTo = inReplyTo;
-        this.mailBody = mailBody;
-        this.attachments = attachments;
-    }
-
-    public String getInReplyTo() {
-        return inReplyTo;
-    }
-
-    public String getMailBody() {
-        return mailBody;
-    }
-
-    public Collection<MailAttachment> getAttachments() {
-        return attachments;
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailModule.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailModule.java
deleted file mode 100644
index 6700bb41a3..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailModule.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.multibindings.Multibinder;
-import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
-import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsServiceImpl;
-import se.su.dsv.scipro.mail.MailEventService;
-import se.su.dsv.scipro.springdata.serviceimpls.UserProfileServiceImpl;
-import se.su.dsv.scipro.springdata.services.UserProfileService;
-import se.su.dsv.scipro.system.Lifecycle;
-
-public class ForumMailModule extends AbstractModule {
-    static final String FORUM_RELATIVE_URL = "forum/mail";
-
-    @Override
-    protected void configure() {
-        requireBinding(MailEventService.class);
-
-        bind(ForumMailRepository.class).to(ForumMailRepositoryImpl.class);
-        bind(ForumMailService.class).to(ForumMailServiceImpl.class);
-        bind(ForumMailSettingsService.class).to(ForumMailSettingsServiceImpl.class);
-        bind(ForumMailReader.class).to(IMAPReader.class);
-        bind(MailContentParser.class).to(ForumMailFormatterImpl.class);
-        bind(ForumMailFormatter.class).to(ForumMailFormatterImpl.class);
-        bind(SendForumMail.class).asEagerSingleton();
-        bind(UserProfileService.class).to(UserProfileServiceImpl.class);
-        bind(MailHandler.class).to(ReadForumMail.class);
-        bind(GeneralSystemSettingsService.class).to(GeneralSystemSettingsServiceImpl.class);
-        Multibinder.newSetBinder(binder(), Lifecycle.class).addBinding()
-                .to(ForumMailWorkerSchedule.class);
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailProject.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailProject.java
deleted file mode 100644
index 88d699721b..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailProject.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
-import se.su.dsv.scipro.mail.MailEvent;
-import se.su.dsv.scipro.system.User;
-
-import jakarta.persistence.Entity;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.Table;
-import java.util.Objects;
-
-@Entity
-@Table(name = "forum_mail_project")
-public class ForumMailProject extends ForumMail {
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "project_thread_id")
-    private ProjectThread projectThread;
-
-    protected ForumMailProject() {}
-
-    public ForumMailProject(final MailEvent mailEvent, final User user, final ProjectThread projectThread) {
-        super(mailEvent, user);
-        this.projectThread = projectThread;
-    }
-
-    public ProjectThread getProjectThread() {
-        return projectThread;
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (o == this) return true;
-        if (!(o instanceof ForumMailProject)) return false;
-        final ForumMailProject other = (ForumMailProject) o;
-        return other.canEqual(this)
-                && super.equals(o)
-                && Objects.equals(this.getProjectThread(), other.getProjectThread());
-    }
-
-    @Override
-    protected boolean canEqual(final Object other) {
-        return other instanceof ForumMailProject;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(this.getProjectThread());
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailReader.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailReader.java
deleted file mode 100644
index c1fc8ae85b..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailReader.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-public interface ForumMailReader {
-    void accept(MailHandler mailHandler);
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailRepository.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailRepository.java
deleted file mode 100644
index 06a3bb2d88..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailRepository.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface ForumMailRepository extends JpaRepository<ForumMail, Long> {
-
-    ForumMail findByMessageID(String messageID);
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailRepositoryImpl.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailRepositoryImpl.java
deleted file mode 100644
index 1d5d40a98b..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailRepositoryImpl.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.system.GenericRepo;
-
-import jakarta.inject.Inject;
-import jakarta.inject.Provider;
-import jakarta.persistence.EntityManager;
-
-public class ForumMailRepositoryImpl extends GenericRepo<ForumMail, Long> implements ForumMailRepository {
-    @Inject
-    public ForumMailRepositoryImpl(final Provider<EntityManager> em) {
-        super(em, ForumMail.class, QForumMail.forumMail);
-    }
-
-    @Override
-    public ForumMail findByMessageID(String messageID) {
-        return findOne(QForumMail.forumMail.mailEvent.messageID.eq(messageID));
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailService.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailService.java
deleted file mode 100644
index 6e63eedbea..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailService.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-public interface ForumMailService {
-
-    ForumMail findByMessageID(String messageID);
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailServiceImpl.java
deleted file mode 100644
index 1e6bcae2bd..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailServiceImpl.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import jakarta.inject.Inject;
-
-public class ForumMailServiceImpl implements ForumMailService {
-
-    private ForumMailRepository forumMailRepository;
-
-    @Inject
-    public ForumMailServiceImpl(ForumMailRepository forumMailRepository) {
-        this.forumMailRepository = forumMailRepository;
-    }
-
-    @Override
-    public ForumMail findByMessageID(String messageID) {
-        return forumMailRepository.findByMessageID(messageID);
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettings.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettings.java
deleted file mode 100644
index 03c7f97b6a..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettings.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.system.DomainObject;
-
-import jakarta.persistence.Basic;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
-import java.util.Objects;
-
-@Table(name="forum_mail_settings")
-@Entity
-public class ForumMailSettings extends DomainObject {
-
-    @Id
-    private Long id;
-
-    @Basic
-    private String host;
-
-    @Basic
-    private int port;
-
-    @Basic
-    private String replyAddress;
-
-    @Basic
-    private String password;
-
-    @Basic
-    private String account;
-
-    @Basic(optional = false)
-    private boolean enabled = false;
-
-    public ForumMailSettings(long id) {
-        this.id = id;
-    }
-
-    public ForumMailSettings() {
-    }
-
-    public boolean isEnabled() {
-        return enabled;
-    }
-
-    public String getReplyAddress() {
-        return replyAddress;
-    }
-
-    public String getAccount() {
-        return account;
-    }
-
-    @Override
-    public Long getId() {
-        return this.id;
-    }
-
-    public String getHost() {
-        return this.host;
-    }
-
-    public int getPort() {
-        return this.port;
-    }
-
-    public String getPassword() {
-        return this.password;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public void setHost(String host) {
-        this.host = host;
-    }
-
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    public void setReplyAddress(String replyAddress) {
-        this.replyAddress = replyAddress;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-
-    public void setEnabled(boolean enabled) {
-        this.enabled = enabled;
-    }
-
-    @Override
-    public String toString() {
-        return "ForumMailSettings(id=" + this.getId() + ", host=" + this.getHost() + ", port=" + this.getPort() + ", replyAddress=" + this.getReplyAddress() + ", password=" + this.getPassword() + ", account=" + this.getAccount() + ", enabled=" + this.isEnabled() + ")";
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (o == this) return true;
-        if (!(o instanceof ForumMailSettings)) return false;
-        final ForumMailSettings other = (ForumMailSettings) o;
-        return other.canEqual(this)
-                && super.equals(o)
-                && Objects.equals(this.getId(), other.getId())
-                && Objects.equals(this.getHost(), other.getHost())
-                && this.getPort() == other.getPort()
-                && Objects.equals(this.getReplyAddress(), other.getReplyAddress())
-                && Objects.equals(this.getPassword(), other.getPassword())
-                && Objects.equals(this.getAccount(), other.getAccount())
-                && this.isEnabled() == other.isEnabled();
-    }
-
-    protected boolean canEqual(final Object other) {
-        return other instanceof ForumMailSettings;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(this.getId(), this.getHost(), this.getPort(), this.getReplyAddress(), this.getPassword(), this.getAccount(), this.isEnabled());
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettingsService.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettingsService.java
deleted file mode 100644
index ed92309bbb..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettingsService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.system.GenericService;
-
-public interface ForumMailSettingsService extends GenericService<ForumMailSettings, Long> {
-
-    ForumMailSettings getSettings();
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettingsServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettingsServiceImpl.java
deleted file mode 100644
index d93db49e64..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailSettingsServiceImpl.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import com.google.inject.persist.Transactional;
-import se.su.dsv.scipro.system.AbstractServiceImpl;
-
-import jakarta.inject.Inject;
-import jakarta.inject.Provider;
-import jakarta.persistence.EntityManager;
-
-public class ForumMailSettingsServiceImpl extends AbstractServiceImpl<ForumMailSettings,Long> implements ForumMailSettingsService {
-
-    public static final long INSTANCE_ID = 1L;
-
-    @Inject
-    public ForumMailSettingsServiceImpl(Provider<EntityManager> em) {
-        super(em, ForumMailSettings.class, QForumMailSettings.forumMailSettings);
-    }
-
-    @Override
-    @Transactional
-    public ForumMailSettings getSettings() {
-        ForumMailSettings settings = findOne(INSTANCE_ID);
-        if (settings == null) {
-            settings = new ForumMailSettings(INSTANCE_ID);
-            save(settings);
-        }
-        return settings;
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailWorker.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailWorker.java
deleted file mode 100644
index 933f4d7033..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailWorker.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.workerthreads.AbstractWorker;
-
-import jakarta.inject.Inject;
-
-public class ForumMailWorker extends AbstractWorker {
-
-    private final ForumMailReader mailReader;
-    private final MailHandler mailHandler;
-    private final ForumMailSettingsService forumMailSettingsService;
-
-    @Inject
-    public ForumMailWorker(ForumMailReader mailReader, MailHandler mailHandler, ForumMailSettingsService forumMailSettingsService) {
-        this.mailReader = mailReader;
-        this.mailHandler = mailHandler;
-        this.forumMailSettingsService = forumMailSettingsService;
-    }
-
-    @Override
-    protected void doWork() {
-        if (forumMailSettingsService.getSettings().isEnabled()){
-            mailReader.accept(mailHandler);
-        }
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailWorkerSchedule.java b/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailWorkerSchedule.java
deleted file mode 100644
index e09a9a8826..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ForumMailWorkerSchedule.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import se.su.dsv.scipro.system.Lifecycle;
-import se.su.dsv.scipro.workerthreads.Scheduler;
-
-import jakarta.inject.Inject;
-import jakarta.inject.Provider;
-import jakarta.inject.Singleton;
-import java.util.concurrent.TimeUnit;
-
-@Singleton
-public class ForumMailWorkerSchedule implements Lifecycle {
-    private final Scheduler scheduler;
-    private final Provider<ForumMailWorker> forumMailWorker;
-
-    @Inject
-    public ForumMailWorkerSchedule(final Scheduler scheduler, final Provider<ForumMailWorker> forumMailWorker) {
-        this.scheduler = scheduler;
-        this.forumMailWorker = forumMailWorker;
-    }
-
-    @Override
-    public void start() {
-        scheduler.schedule("Forum mail worker").runBy(forumMailWorker).every(10, TimeUnit.MINUTES);
-    }
-
-    @Override
-    public void stop() {
-
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/IMAPReader.java b/core/src/main/java/se/su/dsv/scipro/forummail/IMAPReader.java
deleted file mode 100644
index 4646a17745..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/IMAPReader.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import jakarta.mail.Flags;
-import jakarta.mail.Folder;
-import jakarta.mail.Message;
-import jakarta.mail.MessagingException;
-import jakarta.mail.Multipart;
-import jakarta.mail.Part;
-import jakarta.mail.Session;
-import jakarta.mail.Store;
-import jakarta.mail.internet.MimeMessage;
-import jakarta.mail.search.FlagTerm;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import jakarta.inject.Inject;
-import java.io.IOException;
-import java.util.*;
-
-public class IMAPReader implements ForumMailReader {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(IMAPReader.class);
-
-    private final ForumMailSettingsService forumMailSettingsService;
-    private final MailContentParser contentParser;
-
-    @Inject
-    public IMAPReader(ForumMailSettingsService forumMailSettingsService,
-                      MailContentParser contentParser) {
-        this.forumMailSettingsService = forumMailSettingsService;
-        this.contentParser = contentParser;
-    }
-
-    @Override
-    public void accept(MailHandler mailHandler) {
-        try {
-            try (Store store = connectToIMAP(); Folder folder = openFolder(store)) {
-                List<ForumMailMessage> forumMailMessages = messagesAsList(folder.search(unreadOnly()));
-                for (ForumMailMessage forumMailMessage : forumMailMessages) {
-                    mailHandler.accept(forumMailMessage);
-                }
-            }
-        } catch (MessagingException | IOException e) {
-            LOGGER.info("Something went wrong while reading e-mail: ", e);
-        }
-    }
-
-    private FlagTerm unreadOnly() {
-        return new FlagTerm(new Flags(Flags.Flag.SEEN), false);
-    }
-
-    private Store connectToIMAP() throws MessagingException {
-        Properties props = System.getProperties();
-        props.setProperty("mail.store.protocol", "imaps");
-        Session session = Session.getInstance(props);
-        Store store = session.getStore("imaps");
-        ForumMailSettings settings = forumMailSettingsService.getSettings();
-        store.connect(settings.getHost(), settings.getPort(),
-                settings.getAccount(), settings.getPassword());
-        return store;
-    }
-
-    private Folder openFolder(Store store) throws MessagingException {
-        Folder folder = store.getFolder("inbox");
-        if (!folder.isOpen()) {
-            folder.open(Folder.READ_WRITE);
-        }
-        return folder;
-    }
-
-    private List<ForumMailMessage> messagesAsList(Message[] messages) throws MessagingException, IOException {
-        List<ForumMailMessage> messageList = new ArrayList<>();
-        for (Message message : messages) {
-            MimeMessage mime = (MimeMessage) message;
-            String inReplyTo = mime.getHeader("In-Reply-To", null);
-            if (inReplyTo != null) {
-                Collection<MailAttachment> attachments = getAttachments(message);
-                messageList.add(new ForumMailMessage(inReplyTo, contentParser.format(message), attachments));
-            }
-        }
-        return messageList;
-    }
-
-    private Collection<MailAttachment> getAttachments(Part part) throws MessagingException, IOException {
-        Collection<MailAttachment> attachments = new ArrayList<>();
-        if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
-            attachments.add(new MailAttachment(part));
-        }
-        if (part.isMimeType("multipart/*")) {
-            Multipart multipart = (Multipart) part.getContent();
-            for (int i = 0; i < multipart.getCount(); i++) {
-                attachments.addAll(getAttachments(multipart.getBodyPart(i)));
-            }
-        }
-        return attachments;
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/MailAttachment.java b/core/src/main/java/se/su/dsv/scipro/forummail/MailAttachment.java
deleted file mode 100644
index f2eb42d1d5..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/MailAttachment.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import jakarta.mail.MessagingException;
-import jakarta.mail.Part;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UncheckedIOException;
-import java.util.function.Function;
-
-public class MailAttachment {
-    private final Part part;
-
-    public MailAttachment(final Part part) {
-        this.part = part;
-    }
-
-    public String getFileName() {
-        try {
-            return part.getFileName();
-        } catch (MessagingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public String getContentType() {
-        try {
-            return part.getContentType();
-        } catch (MessagingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public long getSize() {
-        try {
-            return part.getSize();
-        } catch (MessagingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public <T> T handleData(Function<InputStream, T> handler) {
-        try (InputStream is = part.getInputStream()) {
-            return handler.apply(is);
-        } catch (MessagingException e) {
-            throw new RuntimeException(e);
-        } catch (IOException e) {
-            throw new UncheckedIOException(e);
-        }
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/MailContentParser.java b/core/src/main/java/se/su/dsv/scipro/forummail/MailContentParser.java
deleted file mode 100644
index 6866b8c17e..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/MailContentParser.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import jakarta.mail.Part;
-
-public interface MailContentParser {
-
-    String format(Part message);
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/MailHandler.java b/core/src/main/java/se/su/dsv/scipro/forummail/MailHandler.java
deleted file mode 100644
index 5d4fe78f28..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/MailHandler.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-public interface MailHandler {
-    void accept(ForumMailMessage mail);
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/ReadForumMail.java b/core/src/main/java/se/su/dsv/scipro/forummail/ReadForumMail.java
deleted file mode 100644
index e45f143fdb..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/ReadForumMail.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import com.google.inject.persist.Transactional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import se.su.dsv.scipro.file.FileUpload;
-import se.su.dsv.scipro.forum.Attachment;
-import se.su.dsv.scipro.forum.GroupForumService;
-import se.su.dsv.scipro.forum.ProjectForumService;
-import se.su.dsv.scipro.system.User;
-
-import jakarta.inject.Inject;
-import java.io.InputStream;
-import java.util.*;
-import java.util.function.Function;
-
-public class ReadForumMail implements MailHandler {
-    private static final Logger LOGGER = LoggerFactory.getLogger(ReadForumMail.class);
-
-    private final GroupForumService groupForumService;
-    private final ProjectForumService projectForumService;
-    private final ForumMailService forumMailService;
-
-    @Inject
-    public ReadForumMail(final GroupForumService groupForumService, final ProjectForumService projectForumService, final ForumMailService forumMailService) {
-        this.groupForumService = groupForumService;
-        this.projectForumService = projectForumService;
-        this.forumMailService = forumMailService;
-    }
-
-    @Override
-    @Transactional
-    public void accept(final ForumMailMessage mail) {
-        final ForumMail allowed = forumMailService.findByMessageID(mail.getInReplyTo());
-        if (allowed != null) {
-
-            Set<Attachment> attachments = new HashSet<>();
-            for (MailAttachment mailAttachment : mail.getAttachments()){
-                attachments.add(Attachment.newUpload(new MailUpload(mailAttachment, allowed.getUser())));
-            }
-
-            if (allowed instanceof ForumMailGroup) {
-                groupForumService.createReply(
-                        ((ForumMailGroup) allowed).getGroupThread(),
-                        allowed.getUser(),
-                        mail.getMailBody(),
-                        attachments);
-            }
-            else if (allowed instanceof ForumMailProject) {
-                projectForumService.createReply(
-                        ((ForumMailProject) allowed).getProjectThread(),
-                        allowed.getUser(),
-                        mail.getMailBody(),
-                        attachments);
-            }
-            LOGGER.info("New reply through mail: {}", allowed);
-        }
-    }
-
-    private static class MailUpload implements FileUpload {
-
-        private final MailAttachment attachment;
-        private final User uploader;
-
-        public MailUpload(final MailAttachment attachment, final User uploader) {
-            this.attachment = attachment;
-            this.uploader = uploader;
-        }
-
-        @Override
-        public String getFileName() {
-            return attachment.getFileName();
-        }
-
-        @Override
-        public String getContentType() {
-            return attachment.getContentType();
-        }
-
-        @Override
-        public User getUploader() {
-            return uploader;
-        }
-
-        @Override
-        public long getSize() {
-            return attachment.getSize();
-        }
-
-        @Override
-        public <T> T handleData(final Function<InputStream, T> handler) {
-            return attachment.handleData(handler);
-        }
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/forummail/SendForumMail.java b/core/src/main/java/se/su/dsv/scipro/forummail/SendForumMail.java
deleted file mode 100644
index f146fbf356..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/forummail/SendForumMail.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import com.google.common.eventbus.EventBus;
-import com.google.common.eventbus.Subscribe;
-import se.su.dsv.scipro.file.FileReference;
-import se.su.dsv.scipro.forum.NewGroupForumReplyEvent;
-import se.su.dsv.scipro.forum.NewProjectForumReplyEvent;
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-import se.su.dsv.scipro.forum.dataobjects.GroupThread;
-import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
-import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
-import se.su.dsv.scipro.group.Group;
-import se.su.dsv.scipro.mail.MailEvent;
-import se.su.dsv.scipro.mail.MailEventService;
-import se.su.dsv.scipro.project.Project;
-import se.su.dsv.scipro.springdata.services.UserProfileService;
-import se.su.dsv.scipro.system.User;
-
-import jakarta.inject.Inject;
-import java.util.*;
-import java.util.function.BiConsumer;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-public class SendForumMail {
-
-    private final ForumMailRepository forumMailRepository;
-    private final ForumMailSettingsService mailSettingsService;
-    private final MailEventService mailEventService;
-    private final ForumMailFormatter formatter;
-    private final GeneralSystemSettingsService generalSystemSettings;
-    private final UserProfileService userProfileService;
-
-    SendForumMail(
-            ForumMailRepository forumMailRepository,
-            ForumMailSettingsService mailSettingsService,
-            MailEventService mailEventService,
-            ForumMailFormatter formatter,
-            GeneralSystemSettingsService generalSystemSettings,
-            UserProfileService userProfileService)
-    {
-        this.forumMailRepository = forumMailRepository;
-        this.mailSettingsService = mailSettingsService;
-        this.mailEventService = mailEventService;
-        this.formatter = formatter;
-        this.generalSystemSettings = generalSystemSettings;
-        this.userProfileService = userProfileService;
-    }
-
-    @Inject
-    public SendForumMail(
-            ForumMailRepository forumMailRepository,
-            ForumMailSettingsService mailSettingsService,
-            MailEventService mailEventService,
-            ForumMailFormatter formatter,
-            GeneralSystemSettingsService generalSystemSettings,
-            EventBus eventBus,
-            UserProfileService userProfileService)
-    {
-        this(forumMailRepository, mailSettingsService, mailEventService, formatter, generalSystemSettings, userProfileService);
-        eventBus.register(this);
-    }
-
-    @Subscribe
-    public void newProjectForumReply(NewProjectForumReplyEvent event) {
-        if (mailSettingsService.getSettings().isEnabled()) {
-
-            Project project = event.getProjectThread().getProject();
-
-            List<User> recipients = Stream.concat(Stream.of(project.getHeadSupervisor()), project.getCoSupervisors().stream())
-                    .filter(user -> !Objects.equals(event.getReply().getPostedBy(), user))
-                    .filter(userProfileService::isReceiveForumMail)
-                    .toList();
-
-            Set<FileReference> attachments = event.getReply().getAttachments();
-            MailData data = new MailData(event.getProjectThread().getForumThread(), attachments);
-
-            final String subject = subject(event.getProjectThread());
-            final String footer = footer(event.getProjectThread());
-            final String url = url(event.getProjectThread());
-
-            String mailContent = generateMailContent(data, footer, url);
-
-            sendMails(subject, mailContent, recipients, (mailEvent, recipient) ->
-                    forumMailRepository.save(new ForumMailProject(mailEvent, recipient, event.getProjectThread())));
-        }
-    }
-
-    @Subscribe
-    public void newGroupForumReply(NewGroupForumReplyEvent event) {
-        if (mailSettingsService.getSettings().isEnabled()) {
-
-            Group group = event.getGroupThread().getGroup();
-            List<User> recipients = group.getProjects().stream()
-                    .flatMap(project -> Stream.concat(Stream.of(project.getHeadSupervisor()), project.getCoSupervisors().stream()))
-                    .filter(user -> !Objects.equals(event.getReply().getPostedBy(), user))
-                    .filter(userProfileService::isReceiveForumMail)
-                    .toList();
-
-            Set<FileReference> attachments = event.getReply().getAttachments();
-            MailData data = new MailData(event.getGroupThread().getForumThread(), attachments);
-
-            final String subject = subject(event.getGroupThread());
-            final String footer = footer(event.getGroupThread());
-            final String url = url(event.getGroupThread());
-
-            String mailContent = generateMailContent(data, footer, url);
-            sendMails(subject, mailContent, recipients, (mailEvent, recipient) ->
-                    forumMailRepository.save(new ForumMailGroup(mailEvent, recipient, event.getGroupThread())));
-        }
-    }
-
-    private void sendMails(String subject, String body, Iterable<User> recipients, BiConsumer<MailEvent, User> f) {
-        for (User recipient : recipients) {
-            MailEvent mailEvent = generateMail(recipient, subject, body);
-            f.accept(mailEvent, recipient);
-        }
-    }
-
-    private static class MailData {
-        private final ForumThread thread;
-        private final Set<FileReference> attachments;
-
-        MailData(ForumThread thread, Set<FileReference> attachments) {
-            this.thread = thread;
-            this.attachments = attachments;
-        }
-    }
-
-    private String generateMailContent(MailData data, CharSequence footer, CharSequence url) {
-        StringBuilder content = new StringBuilder();
-        content.append(formatter.formatBody(data.thread));
-        if (!data.attachments.isEmpty()) {
-            content.append("\n\n");
-            content.append("Attachments: (go to project forum to download)\n");
-            data.attachments.forEach(attachment -> content.append(attachment.getName()).append("\n"));
-        }
-        content.append(footer).append("\n");
-
-        content.append("* View forum in SciPro here: ").append(url);
-
-        return content.toString();
-    }
-
-    private MailEvent generateMail(User recipient, String subject, String body) {
-        MailEvent mail = new MailEvent();
-        mail.getRecipients().add(recipient);
-        mail.setMessageBody(body);
-        mail.setSubject(subject);
-
-        ForumMailSettings settings = mailSettingsService.getSettings();
-        mail.setFromEmail(settings.getReplyAddress());
-        mail.setFromName(settings.getAccount());
-        return mailEventService.save(mail);
-    }
-
-    private String subject(ProjectThread a) {
-        if (a.getForumThread().getPostCount() == 1)
-            return String.format("Forum post: %s", a.getForumThread().getSubject());
-        else return String.format("Forum reply: %s", a.getForumThread().getSubject());
-    }
-
-    private String footer(ProjectThread a) {
-        return String.format("* Project: %s", a.getProject().getTitle());
-    }
-
-    private String url(ProjectThread a) {
-        return String.format("%s/project/?id=%d", baseUrl(), a.getId());
-    }
-
-    private String baseUrl() {
-        return generalSystemSettings.getGeneralSystemSettingsInstance().getSciproURL() + ForumMailModule.FORUM_RELATIVE_URL;
-    }
-
-    private String subject(GroupThread a) {
-        if (a.getForumThread().getPostCount() == 1)
-            return String.format("Group forum: %s", a.getForumThread().getSubject());
-        else return String.format("Group forum reply: %s", a.getForumThread().getSubject());
-    }
-
-    private String footer(GroupThread a) {
-        String projects = a.getGroup()
-                .getProjects()
-                .stream()
-                .map(Project::getTitle)
-                .collect(Collectors.joining(", "));
-        return String.format("* Group: %s\n* Projects: %s", a.getGroup().getTitle(), projects);
-    }
-
-    private String url(GroupThread a) {
-        return String.format("%s/group/?id=%d", baseUrl(), a.getId());
-    }
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/settings/dataobjects/UserProfile.java b/core/src/main/java/se/su/dsv/scipro/settings/dataobjects/UserProfile.java
index 9b510d09a7..01387245d7 100644
--- a/core/src/main/java/se/su/dsv/scipro/settings/dataobjects/UserProfile.java
+++ b/core/src/main/java/se/su/dsv/scipro/settings/dataobjects/UserProfile.java
@@ -57,9 +57,6 @@ public class UserProfile extends DomainObject {
     @Enumerated(EnumType.STRING)
     private Roles selectedRole;
 
-    @Basic(optional = false)
-    private boolean receiveForumMail = false;
-
     @Override
     public Long getId() {
         return this.id;
@@ -105,10 +102,6 @@ public class UserProfile extends DomainObject {
         return this.selectedRole;
     }
 
-    public boolean isReceiveForumMail() {
-        return this.receiveForumMail;
-    }
-
     public void setId(Long id) {
         this.id = id;
     }
@@ -153,13 +146,9 @@ public class UserProfile extends DomainObject {
         this.selectedRole = selectedRole;
     }
 
-    public void setReceiveForumMail(boolean receiveForumMail) {
-        this.receiveForumMail = receiveForumMail;
-    }
-
     @Override
     public String toString() {
-        return "UserProfile(id=" + this.getId() + ", user=" + this.getUser() + ", skypeId=" + this.getSkypeId() + ", phoneNumber=" + this.getPhoneNumber() + ", otherInfo=" + this.getOtherInfo() + ", mailCompilation=" + this.isMailCompilation() + ", defaultProjectStatusFilter=" + this.getDefaultProjectStatusFilter() + ", defaultProjectTeamMemberRolesFilter=" + this.getDefaultProjectTeamMemberRolesFilter() + ", defaultSupervisorFilter=" + this.isDefaultSupervisorFilter() + ", defaultProjectTypeFilter=" + this.getDefaultProjectTypeFilter() + ", selectedRole=" + this.getSelectedRole() + ", receiveForumMail=" + this.isReceiveForumMail() + ")";
+        return "UserProfile(id=" + this.getId() + ", user=" + this.getUser() + ", skypeId=" + this.getSkypeId() + ", phoneNumber=" + this.getPhoneNumber() + ", otherInfo=" + this.getOtherInfo() + ", mailCompilation=" + this.isMailCompilation() + ", defaultProjectStatusFilter=" + this.getDefaultProjectStatusFilter() + ", defaultProjectTeamMemberRolesFilter=" + this.getDefaultProjectTeamMemberRolesFilter() + ", defaultSupervisorFilter=" + this.isDefaultSupervisorFilter() + ", defaultProjectTypeFilter=" + this.getDefaultProjectTypeFilter() + ", selectedRole=" + this.getSelectedRole() + ")";
     }
 
     @Override
diff --git a/core/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImpl.java
index 112f48664d..a89512dab1 100644
--- a/core/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImpl.java
@@ -32,18 +32,6 @@ public class UserProfileServiceImpl extends AbstractServiceImpl<UserProfile, Lon
         return profile;
     }
 
-    @Override
-    public boolean isReceiveForumMail(User user) {
-        return findByUser(user).isReceiveForumMail();
-    }
-
-    @Override
-    public void setReceiveForumMail(User user, boolean receive) {
-        UserProfile profile = findByUser(user);
-        profile.setReceiveForumMail(receive);
-        save(profile);
-    }
-
     @Override
     public List<User> findUsersWithMailCompilation() {
         return createQuery().where(QUserProfile.userProfile.mailCompilation.isTrue()).select(QUserProfile.userProfile.user).fetch();
diff --git a/core/src/main/java/se/su/dsv/scipro/springdata/services/UserProfileService.java b/core/src/main/java/se/su/dsv/scipro/springdata/services/UserProfileService.java
index 5fc59d98f3..76a0f8c5d7 100644
--- a/core/src/main/java/se/su/dsv/scipro/springdata/services/UserProfileService.java
+++ b/core/src/main/java/se/su/dsv/scipro/springdata/services/UserProfileService.java
@@ -10,8 +10,6 @@ import java.util.List;
 public interface UserProfileService extends GenericService<UserProfile, Long> {
     UserProfile findByUser(User user);
 
-    boolean isReceiveForumMail(User user);
-    void setReceiveForumMail(User user, boolean receive);
     List<User> findUsersWithMailCompilation();
     Roles findSelectedRole(User user);
     void setSelectedRole(User user, Roles role);
diff --git a/core/src/main/resources/db/migration/V386__remove_forum_replies_via_mail.sql b/core/src/main/resources/db/migration/V386__remove_forum_replies_via_mail.sql
new file mode 100644
index 0000000000..9075019530
--- /dev/null
+++ b/core/src/main/resources/db/migration/V386__remove_forum_replies_via_mail.sql
@@ -0,0 +1,6 @@
+ALTER TABLE `user_profile` DROP COLUMN `receiveForumMail`;
+DROP TABLE `forum_mail_settings`;
+DROP TABLE `forum_mail_project`;
+DROP TABLE `forum_mail_group`;
+DROP TABLE `forum_mail_reviewer`;
+DROP TABLE `forum_mail`;
diff --git a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailFormatterImplTest.java b/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailFormatterImplTest.java
deleted file mode 100644
index bfe207984b..0000000000
--- a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailFormatterImplTest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
-import se.su.dsv.scipro.forum.dataobjects.ForumPost;
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-import se.su.dsv.scipro.system.User;
-
-import jakarta.mail.MessagingException;
-import jakarta.mail.Multipart;
-import jakarta.mail.Part;
-import jakarta.mail.internet.MimeBodyPart;
-import jakarta.mail.internet.MimeMultipart;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.startsWith;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.Mockito.lenient;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-public class ForumMailFormatterImplTest {
-
-    ForumMailFormatterImpl parser;
-
-    @BeforeEach
-    public void setUp() throws Exception {
-        parser = new ForumMailFormatterImpl();
-    }
-
-    @Test
-    public void message_without_delimiter_dont_substring() throws Exception {
-        String noDelimiter = "string without delimiter";
-        Part message = createMessage(noDelimiter, "text/plain");
-        assertEquals(noDelimiter, parser.format(message));
-    }
-
-    @Test
-    public void substring_on_delimiter() throws Exception {
-        String body = stringWithDelimiter("This is the reply", "This is the old message");
-        Part message = createMessage(body, "text/plain");
-        assertEquals("This is the reply", parser.format(message));
-    }
-
-    @Test
-    public void unknown_mime_type_returns_null() throws Exception {
-        Part message = createMessage("message body", "foo/bar");
-        assertEquals("", parser.format(message));
-    }
-
-    @Test
-    public void multipart_return_text_plain_if_available() throws Exception {
-        String plainText = "plain text";
-        Part message = createMultipartMessage(plainText, 2);
-        assertEquals(plainText, parser.format(message));
-    }
-
-    @Test
-    public void empty_string_when_no_text_plain_is_available() throws Exception {
-        assertEquals("", parser.format(createMultipartMessage("text", 1)));
-    }
-
-    @Test
-    public void empty_string_on_messaging_exception() throws Exception {
-        assertEquals("", parser.format(createInvalidMessage()));
-    }
-
-    @Test
-    public void composed_content_starts_with_delimiter() {
-        assertThat(parser.formatBody(newThread()), startsWith(ForumMailFormatterImpl.DELIMITER));
-    }
-
-    @Test
-    public void includes_the_content_of_every_post_in_the_thread() {
-        ForumThread forumThread = newThread();
-
-        String content = parser.formatBody(forumThread);
-
-        for (ForumPost post : forumThread.getPosts()) {
-            assertThat(content, containsString(post.getContent()));
-        }
-    }
-
-    @Test
-    public void includes_the_poster_of_every_post_in_the_thread() {
-        ForumThread forumThread = newThread();
-
-        String content = parser.formatBody(forumThread);
-
-        for (ForumPost forumPost : forumThread.getPosts()) {
-            assertThat(content, containsString(forumPost.getPostedBy().getFullName()));
-        }
-    }
-
-    private ForumThread newThread() {
-        ForumThread forumThread = mock(ForumThread.class);
-        List<ForumPost> forumPosts = Arrays.asList(createPost("My first post"), createPost("My second post"));
-        when(forumThread.getPosts()).thenReturn(forumPosts);
-        when(forumThread.getPostCount()).thenReturn(forumPosts.size());
-        return forumThread;
-    }
-
-    private ForumPost createPost(String content) {
-        ForumPost forumPost = new ForumPost();
-        forumPost.setContent(content);
-        forumPost.setPostedBy(User.builder().firstName("Bob").lastName("Tester").emailAddress("bob@example.com").build());
-        return forumPost;
-    }
-
-    private String stringWithDelimiter(String first, String second) {
-        return first + ForumMailFormatterImpl.DELIMITER + second;
-    }
-
-    private Part createMessage(String body, String type) throws MessagingException {
-        Part part = new MimeBodyPart();
-        part.setContent(body, type);
-        part.setHeader("Content-Type", type);
-        return part;
-    }
-
-    private Part createMultipartMessage(String plain, int parts) throws MessagingException {
-        Part part = new MimeBodyPart();
-        Multipart mp = mock(Multipart.class);
-        when(mp.getCount()).thenReturn(parts);
-        MimeBodyPart textPlainPart = createBodyPart(plain, "text/plain");
-        MimeBodyPart multi = createBodyPart("multi", "multipart/mixed");
-        when(mp.getBodyPart(0)).thenReturn(multi);
-        lenient().when(mp.getBodyPart(1)).thenReturn(textPlainPart);
-        part.setContent(mp, "multipart/alternative");
-        part.setHeader("Content-Type", "multipart/alternative");
-        return part;
-    }
-
-    private Part createInvalidMessage() throws MessagingException {
-        MimeBodyPart part = new MimeBodyPart();
-        MimeMultipart mp = new MimeMultipart();
-        mp.addBodyPart(new MimeBodyPart());
-        part.setContent(mp);
-        part.setHeader("Content-Type", "multipart/alternative");
-        return part;
-    }
-
-    private MimeBodyPart createBodyPart(String plain, String contentType) throws MessagingException {
-        MimeBodyPart textPlainPart = new MimeBodyPart();
-        textPlainPart.setText(plain);
-        textPlainPart.setHeader("Content-Type", contentType);
-        return textPlainPart;
-    }
-
-}
diff --git a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailModuleTest.java b/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailModuleTest.java
deleted file mode 100644
index a42273dc59..0000000000
--- a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailModuleTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Module;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import se.su.dsv.scipro.file.FileModule;
-import se.su.dsv.scipro.file.FileStore;
-import se.su.dsv.scipro.forum.GroupForumService;
-import se.su.dsv.scipro.forum.ProjectForumService;
-import se.su.dsv.scipro.mail.MailEventService;
-import se.su.dsv.scipro.test.GuiceTest;
-import se.su.dsv.scipro.test.InMemoryFileStore;
-import se.su.dsv.scipro.workerthreads.Scheduler;
-import se.su.dsv.scipro.workerthreads.WorkerDataService;
-
-@ExtendWith(MockitoExtension.class)
-public abstract class ForumMailModuleTest extends GuiceTest {
-    @Mock
-    protected MailEventService mailEventService;
-    @Mock
-    protected GroupForumService groupForumService;
-    @Mock
-    protected ProjectForumService projectForumService;
-    @Mock
-    protected Scheduler scheduler;
-    @Mock
-    protected WorkerDataService workerDataService;
-
-    @Override
-    protected Module moduleUnderTest() {
-        return new AbstractModule() {
-            @Override
-            protected void configure() {
-                install(new ForumMailModule());
-                install(new FileModule());
-                bind(FileStore.class).to(InMemoryFileStore.class);
-                bind(MailEventService.class).toInstance(mailEventService);
-                bind(GroupForumService.class).toInstance(groupForumService);
-                bind(ProjectForumService.class).toInstance(projectForumService);
-                bind(Scheduler.class).toInstance(scheduler);
-                bind(WorkerDataService.class).toInstance(workerDataService);
-            }
-        };
-    }
-}
diff --git a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailServiceImplTest.java
deleted file mode 100644
index c9295b445c..0000000000
--- a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailServiceImplTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import org.junit.jupiter.api.Test;
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
-import se.su.dsv.scipro.mail.MailEvent;
-import se.su.dsv.scipro.project.Project;
-import se.su.dsv.scipro.system.DegreeType;
-import se.su.dsv.scipro.system.ProjectType;
-import se.su.dsv.scipro.system.User;
-
-import jakarta.inject.Inject;
-
-import java.time.LocalDate;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-public class ForumMailServiceImplTest extends ForumMailModuleTest {
-
-    @Inject
-    ForumMailService mailService;
-
-    @Test
-    public void find_by_message_id() {
-        String messageID = "abc123";
-        ForumMail forumMail = createForumMail(messageID);
-        assertEquals(forumMail, mailService.findByMessageID(messageID));
-    }
-
-    private ForumMail createForumMail(String messageID) {
-        return save(new ForumMailProject(
-                createMailEvent(messageID),
-                createUser(),
-                createForumThread())
-        );
-    }
-
-    private User createUser() {
-        return save(User.builder().firstName("first").lastName("last")
-        .emailAddress("first@last.com").build());
-    }
-
-    private ProjectThread createForumThread() {
-        ForumThread forumThread = new ForumThread();
-        forumThread.setSubject("thread subject");
-        save(forumThread);
-        ProjectType bachelor = save(new ProjectType(DegreeType.BACHELOR, "Bachelor", "Bachelor"));
-        User user = save(User.builder().firstName("Bob").lastName("Example").emailAddress("bob@example.com").build());
-        Project project = save(Project.builder().title("Project").projectType(bachelor).startDate(LocalDate.now()).headSupervisor(user).build());
-        ProjectThread projectThread = new ProjectThread();
-        projectThread.setForumThread(forumThread);
-        projectThread.setProject(project);
-        return save(projectThread);
-    }
-
-    private MailEvent createMailEvent(String messageID) {
-        MailEvent mailEvent = new MailEvent();
-        mailEvent.setMessageID(messageID);
-        mailEvent.setMessageBody("body");
-        mailEvent.setSubject("subject");
-        return save(mailEvent);
-    }
-}
diff --git a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailSettingsServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailSettingsServiceImplTest.java
deleted file mode 100644
index 4ea3e85405..0000000000
--- a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailSettingsServiceImplTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import org.junit.jupiter.api.Test;
-
-import jakarta.inject.Inject;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-public class ForumMailSettingsServiceImplTest extends ForumMailModuleTest {
-
-    @Inject
-    ForumMailSettingsServiceImpl forumMailSettingsService;
-
-    @Test
-    public void finds_existing_settings() {
-        ForumMailSettings settings = save(new ForumMailSettings(1L));
-        assertEquals(settings, forumMailSettingsService.getSettings());
-    }
-
-    @Test
-    public void saves_new_one_if_no_one_exists() {
-        assertNotNull(forumMailSettingsService.getSettings());
-    }
-}
diff --git a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailWorkerTest.java b/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailWorkerTest.java
deleted file mode 100644
index 990fdf2b20..0000000000
--- a/core/src/test/java/se/su/dsv/scipro/forummail/ForumMailWorkerTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-public class ForumMailWorkerTest {
-
-    @Mock
-    private ForumMailReader forumMailReader;
-    @Mock
-    private MailHandler mailHandler;
-    @Mock
-    private ForumMailSettingsService forumMailSettingsService;
-    @InjectMocks
-    private ForumMailWorker worker;
-
-    @Test
-    public void process_mails() {
-        ForumMailSettings settings = new ForumMailSettings();
-        settings.setEnabled(true);
-        when(forumMailSettingsService.getSettings()).thenReturn(settings);
-        worker.doWork();
-        verify(forumMailReader).accept(mailHandler);
-    }
-}
diff --git a/core/src/test/java/se/su/dsv/scipro/forummail/ReadForumMailTest.java b/core/src/test/java/se/su/dsv/scipro/forummail/ReadForumMailTest.java
deleted file mode 100644
index 3226f85d78..0000000000
--- a/core/src/test/java/se/su/dsv/scipro/forummail/ReadForumMailTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import jakarta.mail.Part;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-import se.su.dsv.scipro.forum.dataobjects.GroupThread;
-import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
-import se.su.dsv.scipro.group.Group;
-import se.su.dsv.scipro.mail.MailEvent;
-import se.su.dsv.scipro.project.Project;
-import se.su.dsv.scipro.system.DegreeType;
-import se.su.dsv.scipro.system.ProjectType;
-import se.su.dsv.scipro.system.User;
-import se.su.dsv.scipro.test.ObjectMother;
-
-import jakarta.inject.Inject;
-import java.time.LocalDate;
-import java.util.*;
-
-import static org.mockito.Mockito.*;
-
-@ExtendWith(MockitoExtension.class)
-public class ReadForumMailTest extends ForumMailModuleTest {
-
-    @Inject
-    private ReadForumMail readForumMail;
-
-    private ForumMailMessage message;
-    private GroupThread thread;
-
-    @BeforeEach
-    public void setUp() throws Exception {
-        message = new ForumMailMessage("replyToID", "This is the body", Collections.singleton(new MailAttachment(mock(Part.class))));
-        thread = createGroupThread();
-    }
-
-    @Test
-    public void creates_group_thread_reply_if_found_message_matches_mail_event_message_id() {
-        ForumMailGroup forumMailGroup = createForumMailGroup();
-        readForumMail.accept(message);
-        verify(groupForumService).createReply(eq(forumMailGroup.getGroupThread()), eq(forumMailGroup.getUser()), eq(message.getMailBody()), anySet());
-    }
-
-    @Test
-    public void creates_projct_thread_reply_if_found_message_matches_mail_event_message_id() {
-        ForumMailProject forumMailGroup = createForumMailProject();
-        readForumMail.accept(message);
-        verify(projectForumService).createReply(eq(forumMailGroup.getProjectThread()), eq(forumMailGroup.getUser()), eq(message.getMailBody()), anySet());
-    }
-
-    @Test
-    public void no_mails_exists_should_not_create_thread_reply() {
-        readForumMail.accept(message);
-        verify(groupForumService, never()).createReply(any(GroupThread.class), any(User.class), anyString(), anySet());
-    }
-
-    private ForumThread createThread() {
-        ForumThread forumThread = new ForumThread();
-        forumThread.setSubject("Subject");
-        return save(forumThread);
-    }
-
-    private GroupThread createGroupThread() {
-        Group group = createGroup();
-        ForumThread forumThread1 = createThread();
-        GroupThread groupThread = new GroupThread();
-        groupThread.setForumThread(forumThread1);
-        groupThread.setGroup(group);
-        return save(groupThread);
-    }
-
-    private Group createGroup() {
-        User user = save(User.builder().firstName("Bill").lastName("Tester").emailAddress("bill@example.com").build());
-        Group group = new Group();
-        group.setTitle("Group title");
-        group.setUser(user);
-        return save(group);
-    }
-
-    private MailEvent createMailEvent() {
-        MailEvent mail = new MailEvent();
-        mail.setSubject("subject");
-        mail.setMessageBody("body");
-        mail.setMessageID(message.getInReplyTo());
-        return save(mail);
-    }
-
-    private ForumMailGroup createForumMailGroup() {
-        MailEvent mailEvent = createMailEvent();
-        return save(new ForumMailGroup(mailEvent, ObjectMother.SOME_USER, thread));
-    }
-
-    private ForumMailProject createForumMailProject() {
-        MailEvent mailEvent = createMailEvent();
-        return save(new ForumMailProject(mailEvent, createUser(), createProjectThread()));
-    }
-
-    private ProjectThread createProjectThread() {
-        ProjectType bachelor = save(new ProjectType(DegreeType.BACHELOR, "Bachelor", "Bachelor"));
-        User supervisor = createUser();
-        Project project = save(Project.builder().title("Project").projectType(bachelor).startDate(LocalDate.now()).headSupervisor(supervisor).build());
-        ProjectThread projectThread = new ProjectThread();
-        projectThread.setProject(project);
-        projectThread.setForumThread(createThread());
-        return save(projectThread);
-    }
-
-    private User createUser() {
-        return save(User.builder().firstName("Bob").lastName("Example").emailAddress("bob@example.com").build());
-    }
-}
\ No newline at end of file
diff --git a/core/src/test/java/se/su/dsv/scipro/forummail/SendForumMailTest.java b/core/src/test/java/se/su/dsv/scipro/forummail/SendForumMailTest.java
deleted file mode 100644
index 3a43786fb7..0000000000
--- a/core/src/test/java/se/su/dsv/scipro/forummail/SendForumMailTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package se.su.dsv.scipro.forummail;
-
-import com.google.common.eventbus.EventBus;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import se.su.dsv.scipro.forum.NewProjectForumReplyEvent;
-import se.su.dsv.scipro.forum.dataobjects.ForumPost;
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
-import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettings;
-import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
-import se.su.dsv.scipro.mail.MailEvent;
-import se.su.dsv.scipro.mail.MailEventService;
-import se.su.dsv.scipro.project.Project;
-import se.su.dsv.scipro.springdata.services.UserProfileService;
-import se.su.dsv.scipro.system.DegreeType;
-import se.su.dsv.scipro.system.ProjectType;
-import se.su.dsv.scipro.system.User;
-import se.su.dsv.scipro.test.DomainObjects;
-
-import java.time.LocalDate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.Mockito.*;
-
-@ExtendWith(MockitoExtension.class)
-public class SendForumMailTest {
-    @Mock
-    private ForumMailRepository forumMailRepository;
-    @Mock
-    private MailEventService mailEventService;
-    @Mock
-    private ForumMailSettingsService mailSettingsService;
-    @Mock
-    private ForumMailFormatter composer;
-    @Mock
-    private GeneralSystemSettingsService generalSystemSettings;
-    @Mock
-    private EventBus eventBus;
-    @Mock
-    private UserProfileService userProfileService;
-
-    private ProjectThread projectThread;
-    private ForumPost forumPost;
-
-    private SendForumMail sendForumMail;
-    private User coSupervisor;
-
-    @BeforeEach
-    public void setUp() throws Exception {
-        when(generalSystemSettings.getGeneralSystemSettingsInstance()).thenReturn(new GeneralSystemSettings());
-        when(mailEventService.save(isA(MailEvent.class))).thenReturn(new MailEvent());
-        ForumMailSettings settings = new ForumMailSettings();
-        settings.setEnabled(true);
-        when(mailSettingsService.getSettings()).thenReturn(settings);
-
-        User poster = newUser(1L);
-        final User threadMember = newUser(2L);
-        coSupervisor = newUser(3L);
-        ProjectType bachelor = new ProjectType(DegreeType.BACHELOR, "Bachelor", "Bachelor");
-        Project project = Project.builder().title("Project").projectType(bachelor).startDate(LocalDate.now()).headSupervisor(poster).build();
-        project.addProjectParticipant(threadMember);
-        project.addCoSupervisor(coSupervisor);
-        ForumThread forumThread = new ForumThread();
-        projectThread = new ProjectThread();
-        projectThread.setProject(project);
-        projectThread.setForumThread(forumThread);
-        forumPost = new ForumPost();
-        forumPost.setForumThread(forumThread);
-        forumPost.setPostedBy(poster);
-        when(userProfileService.isReceiveForumMail(any(User.class))).thenReturn(true);
-
-        sendForumMail = new SendForumMail(forumMailRepository, mailSettingsService, mailEventService, composer, generalSystemSettings, eventBus, userProfileService);
-    }
-
-    @Test
-    public void generates_forum_mail_for_every_member() {
-        sendForumMail.newProjectForumReply(new NewProjectForumReplyEvent(projectThread, forumPost));
-
-        ArgumentCaptor<ForumMailProject> captor = ArgumentCaptor.forClass(ForumMailProject.class);
-        verify(forumMailRepository).save(captor.capture());
-
-        ForumMailProject forumMail = captor.getValue();
-        assertThat(forumMail.getUser(), is(coSupervisor));
-        assertThat(forumMail.getProjectThread(), is(projectThread));
-        assertNotNull(forumMail.getMailEvent());
-    }
-
-    @Test
-    public void uses_correct_body() {
-        String content = "Reply here!";
-        when(composer.formatBody(projectThread.getForumThread())).thenReturn(content);
-
-        sendForumMail.newProjectForumReply(new NewProjectForumReplyEvent(projectThread, forumPost));
-
-        ArgumentCaptor<MailEvent> captor = ArgumentCaptor.forClass(MailEvent.class);
-        verify(mailEventService).save(captor.capture());
-
-        assertThat(captor.getValue().getMessageBody(), is(content + "* Project: Project\n* View forum in SciPro here: http://localhost:8080/forum/mail/project/?id=null"));
-    }
-
-    private User newUser(final long id) {
-        User user = User.builder().firstName("Kalle").lastName("Tester").emailAddress("kalle@example.com").build();
-        DomainObjects.injectId(user, id);
-        return user;
-    }
-}
\ No newline at end of file
diff --git a/view/src/main/java/se/su/dsv/scipro/SciProApplication.java b/view/src/main/java/se/su/dsv/scipro/SciProApplication.java
index e5e2f46932..e02ddcfc74 100755
--- a/view/src/main/java/se/su/dsv/scipro/SciProApplication.java
+++ b/view/src/main/java/se/su/dsv/scipro/SciProApplication.java
@@ -29,8 +29,6 @@ import se.su.dsv.scipro.components.DisableSubmitButtonsOnSubmit;
 import se.su.dsv.scipro.examiner.pages.ExaminerStartPage;
 import se.su.dsv.scipro.finalseminar.*;
 import se.su.dsv.scipro.finalthesis.SupervisorFinalThesisListingPage;
-import se.su.dsv.scipro.forum.mail.ForumMailGroupPage;
-import se.su.dsv.scipro.forum.mail.ForumMailProjectPage;
 import se.su.dsv.scipro.forum.pages.ProjectForumBasePage;
 import se.su.dsv.scipro.forum.pages.SupervisorForumBasePage;
 import se.su.dsv.scipro.forum.pages.threaded.*;
@@ -137,7 +135,6 @@ public class SciProApplication extends LifecycleManagedWebApplication {
         mountSupervisorPages();
         mountPeerPages();
         mountErrorPages();
-        mountForumPage();
 
         //Set up authorization strategies for local authentication.
         CompoundAuthorizationStrategy cas = new CompoundAuthorizationStrategy();
@@ -167,11 +164,6 @@ public class SciProApplication extends LifecycleManagedWebApplication {
         });
     }
 
-    private void mountForumPage() {
-        mountPage("forum/mail/project", ForumMailProjectPage.class);
-        mountPage("forum/mail/group", ForumMailGroupPage.class);
-    }
-
     private void mountErrorPages() {
         mountPage("404", NotFoundPage.class);
         mountPage("403", AccessDeniedPage.class);
@@ -303,7 +295,6 @@ public class SciProApplication extends LifecycleManagedWebApplication {
         mountPage("admin/settings/nonworkdays", NonWorkDaysPage.class);
         mountPage("admin/settings/modules", AdminProjectModuleSettingsPage.class);
         mountPage("admin/settings/footer", AdminFooterSettingsPage.class);
-        mountPage("admin/settings/forum", AdminForumSettingsPage.class);
         mountPage("admin/settings/urkund", AdminUrkundSettingsPage.class);
         mountPage("admin/gdpr", AdminGDPRPage.class);
         mountPage("admin/allpeers", AdminPeersPage.class);
diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSystemPage.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSystemPage.java
index 3436080143..1266d715b5 100644
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSystemPage.java
+++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSystemPage.java
@@ -35,7 +35,6 @@ public abstract class AbstractAdminSystemPage extends AbstractAdminPage {
                 items.add(new MenuItem("Project module settings", AdminProjectModuleSettingsPage.class));
                 items.add(new MenuItem("Footer settings", AdminFooterSettingsPage.class));
                 items.add(new MenuItem("Reviewer deadline settings", AdminReviewerDeadlineSettingsPage.class));
-				items.add(new MenuItem("Forum mail settings", AdminForumSettingsPage.class));
 				items.add(new MenuItem("GDPR", AdminGDPRPage.class));
                 return items;
 			}
diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPage.html b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPage.html
deleted file mode 100644
index 7a62a98292..0000000000
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPage.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-<body>
-<wicket:extend>
-    <h4>Mail reply settings</h4>
-            <form class="form-horizontal" wicket:id="form">
-                <div class="mb-3">
-                    <label wicket:for="enabled" class="col-lg-3">Enabled</label>
-                    <div class="col-lg-3">
-                        <input type="checkbox" wicket:id="enabled" />
-                    </div>
-                </div>
-                <div class="mb-3">
-                    <label for="host" wicket:for="host" class="col-lg-2">Incoming mail host (IMAP):</label>
-                    <div class="col-lg-5">
-                        <input id="host" class="form-control" type="text" wicket:id="host"/>
-                    </div>
-                </div>
-                <div class="mb-3">
-                    <label for="port" wicket:for="port" class="col-lg-2">Incoming mail port:</label>
-                    <div class="col-lg-1">
-                        <input id="port" class="form-control" type="text" wicket:id="port"/>
-                    </div>
-                </div>
-                <div class="mb-3">
-                    <label for="account" wicket:for="account" class="col-lg-2">Incoming mail account:</label>
-                    <div class="col-lg-5">
-                        <input id="account" class="form-control" type="text" wicket:id="account">
-                    </div>
-                </div>
-                <div class="mb-3">
-                    <label for="password" wicket:for="password" class="col-lg-2">Incoming mail password:</label>
-                    <div class="col-lg-5">
-                        <input id="password" class="form-control" type="password" wicket:id="password"/>
-                    </div>
-                </div>
-                <div class="mb-3">
-                    <label for="replyAddress" wicket:for="replyAddress" class="col-lg-2">Reply e-mail address:</label>
-                    <div class="col-lg-5">
-                        <input id="replyAddress" class="form-control" type="text" wicket:id="replyAddress"/>
-                    </div>
-                </div>
-                <button class="btn btn-success" type="submit">Save changes</button>
-            </form>
-</wicket:extend>
-</body>
-</html>
\ No newline at end of file
diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPage.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPage.java
deleted file mode 100644
index 4782ee234b..0000000000
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPage.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package se.su.dsv.scipro.admin.pages;
-
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.PasswordTextField;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LambdaModel;
-import org.apache.wicket.model.LoadableDetachableModel;
-import se.su.dsv.scipro.forummail.ForumMailSettings;
-import se.su.dsv.scipro.forummail.ForumMailSettingsService;
-
-import jakarta.inject.Inject;
-
-public class AdminForumSettingsPage extends AbstractAdminSystemPage {
-
-    @Inject
-    private ForumMailSettingsService forumMailSettingsService;
-
-    public AdminForumSettingsPage() {
-        add(new SettingsForm("form", getSettings()));
-    }
-
-    private class SettingsForm extends Form<ForumMailSettings> {
-        public SettingsForm(String id, IModel<ForumMailSettings> model) {
-            super(id, model);
-            add(new CheckBox("enabled", LambdaModel.of(model, ForumMailSettings::isEnabled, ForumMailSettings::setEnabled)));
-            add(new TextField<>("host", LambdaModel.of(model, ForumMailSettings::getHost, ForumMailSettings::setHost)));
-            add(new TextField<>("port", LambdaModel.of(model, ForumMailSettings::getPort, ForumMailSettings::setPort), Integer.class));
-            add(new TextField<>("replyAddress", LambdaModel.of(model, ForumMailSettings::getReplyAddress, ForumMailSettings::setReplyAddress)));
-            add(new TextField<>("account", LambdaModel.of(model, ForumMailSettings::getAccount, ForumMailSettings::setAccount)));
-            PasswordTextField password = new PasswordTextField("password", LambdaModel.of(model, ForumMailSettings::getPassword, ForumMailSettings::setPassword));
-            password.setResetPassword(false);
-            password.setRequired(false);
-            add(password);
-        }
-
-        @Override
-        protected void onSubmit() {
-            success(getString("saved"));
-            forumMailSettingsService.save(getModelObject());
-        }
-    }
-
-    private IModel<ForumMailSettings> getSettings() {
-        return new LoadableDetachableModel<>() {
-            @Override
-            protected ForumMailSettings load() {
-                return forumMailSettingsService.getSettings();
-            }
-        };
-    }
-
-}
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailGroupPage.java b/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailGroupPage.java
deleted file mode 100644
index 9ee758af29..0000000000
--- a/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailGroupPage.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package se.su.dsv.scipro.forum.mail;
-
-import org.apache.wicket.RestartResponseException;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import se.su.dsv.scipro.forum.GroupThreadRepository;
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-import se.su.dsv.scipro.forum.dataobjects.GroupThread;
-import se.su.dsv.scipro.group.Group;
-import se.su.dsv.scipro.group.ViewThreadPage;
-import se.su.dsv.scipro.project.Project;
-import se.su.dsv.scipro.security.auth.Authorization;
-import se.su.dsv.scipro.session.SciProSession;
-import se.su.dsv.scipro.supervisor.pages.SupervisorViewGroupThreadPage;
-import se.su.dsv.scipro.system.User;
-import se.su.dsv.scipro.util.PageParameterKeys;
-
-import jakarta.inject.Inject;
-
-import static se.su.dsv.scipro.security.auth.roles.Roles.AUTHOR;
-import static se.su.dsv.scipro.security.auth.roles.Roles.REVIEWER;
-import static se.su.dsv.scipro.security.auth.roles.Roles.SUPERVISOR;
-
-@Authorization(requiresLoggedInUser = true, authorizedRoles = {AUTHOR, SUPERVISOR, REVIEWER})
-public class ForumMailGroupPage extends WebPage {
-    @Inject
-    GroupThreadRepository groupThreadRepository;
-
-    public ForumMailGroupPage(PageParameters pp) {
-        super(pp);
-
-        final User currentUser = SciProSession.get().getUser();
-        final long id = pp.get("id").toLong(0L);
-        final GroupThread groupThread = groupThreadRepository.findOne(id);
-        if (groupThread == null) {
-            throw new RestartResponseException(getApplication().getHomePage());
-        }
-
-        final Group group = groupThread.getGroup();
-        final PageParameters pageParameters = new PageParameters();
-        pageParameters.set(PageParameterKeys.MAP.get(ForumThread.class), groupThread.getId());
-        pageParameters.set(PageParameterKeys.MAP.get(Group.class), group.getId());
-
-        final boolean hasSupervisingRole = group.getProjects()
-                .stream()
-                .anyMatch(project -> hasSupervisingRole(currentUser, project));
-
-        if (hasSupervisingRole) {
-            throw new RestartResponseException(SupervisorViewGroupThreadPage.class, pageParameters);
-        }
-
-        final boolean isAuthor = group.getProjects()
-                .stream()
-                .anyMatch(project -> project.isParticipant(currentUser));
-
-        if (isAuthor) {
-            throw new RestartResponseException(ViewThreadPage.class, pageParameters);
-        }
-
-        setResponsePage(getApplication().getHomePage());
-    }
-
-    private boolean hasSupervisingRole(User currentUser, Project project) {
-        return project.isReviewer(currentUser) || project.isCoSupervisor(currentUser) || project.isSupervisor(currentUser);
-    }
-}
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailProjectPage.java b/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailProjectPage.java
deleted file mode 100644
index 9e892850cf..0000000000
--- a/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailProjectPage.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package se.su.dsv.scipro.forum.mail;
-
-import org.apache.wicket.RestartResponseException;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import se.su.dsv.scipro.forum.ProjectThreadRepository;
-import se.su.dsv.scipro.forum.dataobjects.ForumThread;
-import se.su.dsv.scipro.forum.dataobjects.ProjectThread;
-import se.su.dsv.scipro.forum.pages.threaded.ProjectViewForumThreadPage;
-import se.su.dsv.scipro.forum.pages.threaded.SupervisorViewForumThreadPage;
-import se.su.dsv.scipro.project.Project;
-import se.su.dsv.scipro.security.auth.Authorization;
-import se.su.dsv.scipro.session.SciProSession;
-import se.su.dsv.scipro.system.User;
-import se.su.dsv.scipro.util.PageParameterKeys;
-
-import jakarta.inject.Inject;
-
-import static se.su.dsv.scipro.security.auth.roles.Roles.AUTHOR;
-import static se.su.dsv.scipro.security.auth.roles.Roles.REVIEWER;
-import static se.su.dsv.scipro.security.auth.roles.Roles.SUPERVISOR;
-
-@Authorization(requiresLoggedInUser = true, authorizedRoles = {AUTHOR, SUPERVISOR, REVIEWER})
-public class ForumMailProjectPage extends WebPage {
-    @Inject
-    ProjectThreadRepository projectThreadRepository;
-
-    public ForumMailProjectPage(PageParameters pp) {
-        super(pp);
-        final User currentUser = SciProSession.get().getUser();
-
-        final long id = pp.get("id").toLong(0L);
-        final ProjectThread projectThread = projectThreadRepository.findOne(id);
-        if (projectThread == null) {
-            throw new RestartResponseException(getApplication().getHomePage());
-        }
-
-        final Project project = projectThread.getProject();
-        final PageParameters pageParameters = new PageParameters();
-        pageParameters.set(PageParameterKeys.MAP.get(ForumThread.class), projectThread.getId());
-        pageParameters.set(PageParameterKeys.MAP.get(Project.class), project.getId());
-
-        if (project.isReviewer(currentUser) || project.isCoSupervisor(currentUser) || project.isSupervisor(currentUser)) {
-            throw new RestartResponseException(SupervisorViewForumThreadPage.class, pageParameters);
-        }
-
-        if (project.isParticipant(currentUser)) {
-            throw new RestartResponseException(ProjectViewForumThreadPage.class, pageParameters);
-        }
-
-        setResponsePage(getApplication().getHomePage());
-    }
-}
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailReceiverSettingsPanel.html b/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailReceiverSettingsPanel.html
deleted file mode 100644
index 748356d389..0000000000
--- a/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailReceiverSettingsPanel.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-<body>
-<wicket:panel>
-    <div class="row">
-        <div class="col-lg-12">
-            <div class="form-check">
-                <input class="form-check-input" type="checkbox" wicket:id="receiveForumMails">
-                <label class="form-check-label" wicket:for="receiveForumMails">
-                    Receive forum mails from projects, groups
-                </label>
-            </div>
-        </div>
-    </div>
-</wicket:panel>
-</body>
-</html>
\ No newline at end of file
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailReceiverSettingsPanel.java b/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailReceiverSettingsPanel.java
deleted file mode 100644
index 8b5816828f..0000000000
--- a/view/src/main/java/se/su/dsv/scipro/forum/mail/ForumMailReceiverSettingsPanel.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package se.su.dsv.scipro.forum.mail;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.Model;
-import se.su.dsv.scipro.session.SciProSession;
-import se.su.dsv.scipro.springdata.services.UserProfileService;
-
-import jakarta.inject.Inject;
-
-public class ForumMailReceiverSettingsPanel extends Panel {
-
-    @Inject
-    private UserProfileService userProfileService;
-
-    public ForumMailReceiverSettingsPanel(String id) {
-        super(id);
-        add(new AjaxCheckBox("receiveForumMails", Model.of(userProfileService.isReceiveForumMail(SciProSession.get().getUser()))) {
-            @Override
-            protected void onUpdate(AjaxRequestTarget target) {
-                userProfileService.setReceiveForumMail(SciProSession.get().getUser(), getModelObject());
-            }
-        });
-    }
-}
diff --git a/view/src/main/java/se/su/dsv/scipro/notifications/pages/SupervisorNotificationSettingsPage.html b/view/src/main/java/se/su/dsv/scipro/notifications/pages/SupervisorNotificationSettingsPage.html
index 3b9cfadd13..c7ad9eb253 100644
--- a/view/src/main/java/se/su/dsv/scipro/notifications/pages/SupervisorNotificationSettingsPage.html
+++ b/view/src/main/java/se/su/dsv/scipro/notifications/pages/SupervisorNotificationSettingsPage.html
@@ -6,7 +6,6 @@
         <div class="col-lg-12">
             <div wicket:id="feedbackPanel"></div>
             <div wicket:id="settingsPanel"></div>
-            <div wicket:id="forumMail"></div>
         </div>
 	</div>
     <div wicket:id="deliveryConfiguration">
diff --git a/view/src/main/java/se/su/dsv/scipro/notifications/pages/SupervisorNotificationSettingsPage.java b/view/src/main/java/se/su/dsv/scipro/notifications/pages/SupervisorNotificationSettingsPage.java
index 8c5b9c9140..8331079048 100644
--- a/view/src/main/java/se/su/dsv/scipro/notifications/pages/SupervisorNotificationSettingsPage.java
+++ b/view/src/main/java/se/su/dsv/scipro/notifications/pages/SupervisorNotificationSettingsPage.java
@@ -1,7 +1,6 @@
 package se.su.dsv.scipro.notifications.pages;
 
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import se.su.dsv.scipro.forum.mail.ForumMailReceiverSettingsPanel;
 import se.su.dsv.scipro.notifications.panels.NotificationSettingsPanel;
 import se.su.dsv.scipro.notifications.settings.panels.MemberDeliveryConfigurationPanel;
 import se.su.dsv.scipro.security.auth.Authorization;
@@ -17,7 +16,6 @@ public class SupervisorNotificationSettingsPage extends AbstractSettingsPage {
 
     public SupervisorNotificationSettingsPage() {
         add(new FeedbackPanel(FEEDBACK).setOutputMarkupId(true));
-        add(new ForumMailReceiverSettingsPanel("forumMail"));
         add(new NotificationSettingsPanel(SETTINGS_PANEL));
         add(new MemberDeliveryConfigurationPanel("deliveryConfiguration", SUPERVISOR));
     }
diff --git a/view/src/main/resources/META-INF/services/com.google.inject.Module b/view/src/main/resources/META-INF/services/com.google.inject.Module
index 4b0582143c..c0c493be41 100644
--- a/view/src/main/resources/META-INF/services/com.google.inject.Module
+++ b/view/src/main/resources/META-INF/services/com.google.inject.Module
@@ -1,7 +1,6 @@
 se.su.dsv.scipro.SciProModule
 se.su.dsv.scipro.reviewing.ReviewingModule
 se.su.dsv.scipro.crosscutting.CrosscuttingModule
-se.su.dsv.scipro.forummail.ForumMailModule
 se.su.dsv.scipro.integration.activityfinalseminar.ActivityFinalSeminarModule
 se.su.dsv.scipro.integration.activityforum.ActivityForumModule
 se.su.dsv.scipro.peer.PeerModule
diff --git a/view/src/test/java/se/su/dsv/scipro/SciProTest.java b/view/src/test/java/se/su/dsv/scipro/SciProTest.java
index 95e115b31e..9a400e0086 100755
--- a/view/src/test/java/se/su/dsv/scipro/SciProTest.java
+++ b/view/src/test/java/se/su/dsv/scipro/SciProTest.java
@@ -46,7 +46,6 @@ import se.su.dsv.scipro.finalthesis.PublishingConsentService;
 import se.su.dsv.scipro.forum.BasicForumService;
 import se.su.dsv.scipro.forum.GroupForumService;
 import se.su.dsv.scipro.forum.ProjectForumService;
-import se.su.dsv.scipro.forummail.ForumMailSettingsService;
 import se.su.dsv.scipro.gdpr.Reporter;
 import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettings;
 import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
@@ -88,7 +87,6 @@ import se.su.dsv.scipro.peer.PerformReviewService;
 import se.su.dsv.scipro.plagiarism.PlagiarismControl;
 import se.su.dsv.scipro.plagiarism.urkund.UrkundService;
 import se.su.dsv.scipro.profiles.CurrentProfile;
-import se.su.dsv.scipro.project.Project;
 import se.su.dsv.scipro.project.ProjectPeopleStatisticsService;
 import se.su.dsv.scipro.project.ProjectService;
 import se.su.dsv.scipro.project.pages.ProjectStartPage;
@@ -322,8 +320,6 @@ public abstract class SciProTest {
     @Mock
     protected FooterAddressRepo footerAddressRepo;
     @Mock
-    protected ForumMailSettingsService forumMailSettingsService;
-    @Mock
     protected ApplicationPeriodFacade applicationPeriodFacade;
     @Mock
     protected FirstMeetingRepository firstMeetingRepository;
diff --git a/view/src/test/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPageTest.java b/view/src/test/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPageTest.java
deleted file mode 100644
index 31d56dd9bc..0000000000
--- a/view/src/test/java/se/su/dsv/scipro/admin/pages/AdminForumSettingsPageTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package se.su.dsv.scipro.admin.pages;
-
-import org.apache.wicket.feedback.FeedbackMessage;
-import org.apache.wicket.util.tester.FormTester;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import se.su.dsv.scipro.SciProTest;
-import se.su.dsv.scipro.forummail.ForumMailSettings;
-
-import java.io.Serializable;
-import java.util.List;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.core.StringContains.containsString;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-public class AdminForumSettingsPageTest extends SciProTest {
-
-    private AdminForumSettingsPage page;
-
-    @BeforeEach
-    public void setUp() throws Exception {
-        when(forumMailSettingsService.getSettings()).thenReturn(createSettings());
-        page = tester.startPage(AdminForumSettingsPage.class);
-
-    }
-
-    @Test
-    public void renders() throws Exception {
-        tester.assertRenderedPage(AdminForumSettingsPage.class);
-    }
-
-    @Test
-    public void form_submit_save_changes() {
-        String mailServer = submitForm();
-
-        ArgumentCaptor<ForumMailSettings> captor = ArgumentCaptor.forClass(ForumMailSettings.class);
-        verify(forumMailSettingsService).save(captor.capture());
-
-        assertEquals(mailServer, captor.getValue().getHost());
-    }
-
-    @Test
-    public void feedback_when_submitting_form() {
-        submitForm();
-        List<Serializable> messages = tester.getMessages(FeedbackMessage.SUCCESS);
-        assertThat(messages, hasItem(containsString(page.getString("saved"))));
-    }
-
-    private String submitForm() {
-        FormTester form = tester.newFormTester("form");
-        String mailServer = "test";
-        form.setValue("host", mailServer);
-        form.submit();
-        return mailServer;
-    }
-
-    private ForumMailSettings createSettings() {
-        return new ForumMailSettings();
-    }
-
-
-}