diff --git a/src/main/java/de/srsoftware/widerhall/data/ListMember.java b/src/main/java/de/srsoftware/widerhall/data/ListMember.java index ece661d..eb593df 100644 --- a/src/main/java/de/srsoftware/widerhall/data/ListMember.java +++ b/src/main/java/de/srsoftware/widerhall/data/ListMember.java @@ -322,6 +322,7 @@ public class ListMember { * @throws SQLException */ public static ListMember load(MailingList list,User user) throws SQLException { + if (list == null || user == null) return null; var rs = Database .open() .select(TABLE_NAME) diff --git a/src/main/java/de/srsoftware/widerhall/data/MailingList.java b/src/main/java/de/srsoftware/widerhall/data/MailingList.java index 3b71f1f..3e72621 100644 --- a/src/main/java/de/srsoftware/widerhall/data/MailingList.java +++ b/src/main/java/de/srsoftware/widerhall/data/MailingList.java @@ -431,30 +431,22 @@ public class MailingList implements MessageHandler, ProblemListener { var senderEmail = internetAddress.getAddress(); var user = User.load(senderEmail); - if (user == null) { // no subscription - if (this.isOpenForGuests()) { - forward(message,subscribers()); - } else { - retainMessage(message); - sentRetentionNotification(senderEmail); - - } - return; - } - var member = ListMember.load(this, user); if (member == null || member.isAwaiting()) { // no subscription if (this.isOpenForGuests()) { - forward(message,subscribers()); - } else { + forward(message, subscribers()); + } else if (this.isOpenForSubscribers()){ retainMessage(message); sentRetentionNotification(senderEmail); + } else { + // at this point, the message is from a non-member and the list + // is only open to moderators. → forward to moderators + forward(message, moderators()); } return; } // at this point the member is at least a subscriber! - if (member.isModerator() || this.isOpenForSubscribers()) { forward(message,subscribers()); } else {