X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FMailingList.java;h=636fa4e6668816ee50338591706e92d4801864c4;hb=f9f2e234ee208985e8086600f8ff37d6140ed9ce;hp=f5fade4ef402c625d652997aaba8c468e18f7e71;hpb=49dc1421b8da25c4e0703e455bd5f1867e5dd269;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/MailingList.java b/src/org/ibex/mail/MailingList.java index f5fade4..636fa4e 100644 --- a/src/org/ibex/mail/MailingList.java +++ b/src/org/ibex/mail/MailingList.java @@ -12,51 +12,31 @@ import java.io.*; import org.prevayler.*; import org.prevayler.Query; -// FEATURE: umbrella structure to mailing lists -public class MailingList extends Target implements Serializable { +public class MailingList extends Persistent implements Target { public static enum UserType { Administrator, Moderator, Member } public static enum SubscriptionType { All, None, Digest, MimeDigest } public static enum Visibility { Members, Public, Nobody } public static enum Action { Accept, Hold, Reject } - public Address address; - public Mailbox archive; - private final long secret; - private MailingList(Address a, Mailbox ar, long s) { this.address=a; this.archive=ar; this.secret=s; } + public Address address; + private final long secret = new Random().nextLong(); - public Hashtable subscribers = new Hashtable(); - public Filter[] filters = new Filter[0]; + public Hashtable subscribers = new Hashtable(); - public String homepage = ""; - public String one_line_description = ""; - public String long_description = ""; - public String message_footer = ""; + public String homepage = ""; + public String one_line_description = ""; + public String long_description = ""; + public String message_footer = ""; - public Visibility listVisibility = Visibility.Nobody; - public Visibility membershipVisibility = Visibility.Nobody; - public Visibility archiveVisibility = Visibility.Members; - public Action defaultPostingType = Action.Hold; + public Visibility listVisibility = Visibility.Nobody; + public Visibility membershipVisibility = Visibility.Nobody; + public Visibility archiveVisibility = Visibility.Members; + public Action defaultPostingType = Action.Hold; - public int bounceThreshhold = 10; + public int bounceThreshhold = 10; - public static MailingList getList(Object all, String listName) { return (MailingList)((Hashtable)all).get(listName); } - public static MailingList getList(final String listName) { - try { - return (MailingList)p.execute(new Query() { public Object query(Object o, Date now) { return getList(o, listName); } }); - } catch (Exception e) { - Log.error(MailingList.class, e); - return null; - } - } - - public synchronized Subscriber getSubscriber(Address subscriber) { - Subscriber s = (Subscriber)subscribers.get(subscriber.toString(false)); - if (s == null) subscribers.put(subscriber, s = new Subscriber()); - return s; - } - - public static class Subscriber implements Serializable { + public static class Subscriber { public Address address; public Action posting; public UserType type; @@ -64,131 +44,55 @@ public class MailingList extends Target implements Serializable { public boolean send_copy_of_own_post; public boolean filter_duplicates_when_ccd; } - - //public static class Filter { - // public class EmergencyModerationFilter { } - // public class MaximumLengthFilter { } - // public class SpamFilter { } - // public class MIMETypes { } - // public class MungeReplyTo { } - // public class AnonymizeSender { public boolean uncorrelated; } - //} - - - public void accept(Message m) throws IOException, MailException { - try { - m = Message.newMessage(new Fountain.StringFountain("List-Id: " + one_line_description + "<"+address+">\r\n" + - m.toString() + - "--\r\n" + - message_footer + "\r\n" + - "to unsubscribe, go to " + homepage + "\r\n")); - } catch (Exception e2) { - Log.error("[list]", e2); - throw new IOException(e2.toString()); - } - Log.warn(MailingList.class, "got message " + m.subject); - archive.accept(m); - try { - String[] subscribers = (String[])p.execute(subscribers()); - Log.warn("**", "length is " + subscribers.length); - for(int i=0; i"); + + m = Message.newMessage(new Fountain.StringFountain(head.getString()+"\r\n"+buf.toString())); + Log.warn(MailingList.class, "archiving list message " + m.subject); + getArchive().accept(m); + + for(java.util.Enumeration e = subscribers.elements(); e.hasMoreElements();) try { + Subscriber s = (Subscriber)e.nextElement(); + Log.warn(MailingList.class, " trying " + s.address); + SMTP.accept(Message.newMessage(m, m.envelopeFrom, s.address)); + Log.warn("[list]", "successfully sent to " + s); + } catch (Exception e2) { Log.error("[list]", e2); } } + //public Filter[] filters = new Filter[0]; + //public static class Filter { + // public class EmergencyModerationFilter { } + // public class MaximumLengthFilter { } + // public class SpamFilter { } + // public class MIMETypes { } + // public class MungeReplyTo { } + // public class AnonymizeSender { public boolean uncorrelated; } + //} }