X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2Ftarget%2FScript.java;h=b112b91b83a0c66de9a210c8ccae70f7b7453491;hb=8c4c8f2fe9140050635f237122bab4528a399b9c;hp=912c732aca78d94b8f986fe4d0c22fe71bba7610;hpb=fab67c8262b062c00d179a5f057d4e489e7c4366;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/target/Script.java b/src/org/ibex/mail/target/Script.java index 912c732..b112b91 100644 --- a/src/org/ibex/mail/target/Script.java +++ b/src/org/ibex/mail/target/Script.java @@ -11,7 +11,7 @@ import org.ibex.mail.target.*; import java.io.*; import java.util.*; -public class Script extends Target { +public class Script extends JS.Obj implements Target { private static final JS.Method METHOD = new JS.Method(); @@ -115,6 +115,10 @@ public class Script extends Target { case "mail.forward": return METHOD; case "mail.forward2": return METHOD; case "mail.send": return METHOD; + case "mail.attempt": return METHOD; + case "mail.later": return Later.instance; + case "mail.drop": return Drop.instance; + case "mail.bounce": return METHOD; case "mail.my": return getSub("mail.my"); case "mail.my.prefs": try { return new org.ibex.js.Directory(new File("/etc/org.ibex.mail.prefs")); @@ -122,8 +126,8 @@ public class Script extends Target { case "mail.my.mailbox": FileBasedMailbox root = FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT, true); return root.slash("user", true).slash("megacz", true).slash("newmail", true); + case "mail.list": return METHOD; //#end - if (JSU.toString(name).startsWith("list.")) { return MailingList.getList(JSU.toString(name).substring(5)); } return super.get(name); } @@ -134,8 +138,10 @@ public class Script extends Target { final int nargs = args.length; String name = JSU.toString(name0); try { + if (name.equals("mail.list")) return MailingList.getMailingList(JS.toString(args[0])).acceptor; if (name.equals("date")) { return new JSDate(args); } - if (name.equals("mail.send") || name.equals("send")) { + if (name.equals("mail.send") || name.equals("send") || name.equals("mail.attempt") || name.equals("attempt")) { + boolean attempt = name.equals("mail.attempt") || name.equals("attempt"); JS m = (JS)a; StringBuffer headers = new StringBuffer(); String body = ""; @@ -158,10 +164,32 @@ public class Script extends Target { envelopeFrom, envelopeTo ); - //org.ibex.mail.protocol.SMTP.Outgoing.accept(message); - boolean ok = org.ibex.mail.protocol.SMTP.Outgoing.attempt(message); - if (!ok) throw new JSExn("SMTP server rejected message"); - return JSU.T; + + boolean ok = false; + try { + if (attempt) { + org.ibex.mail.protocol.SMTP.Outgoing.attempt(message); + } else { + org.ibex.mail.protocol.SMTP.Outgoing.accept(message); + } + ok = true; + } catch (Exception ex) { + if (!attempt) Log.warn(this, ex); + } + if (!ok && !attempt) throw new JSExn("SMTP server rejected message"); + return JSU.B(ok); + } + if (name.equals("mail.bounce")) { + return new JSTarget() { + public void accept(Message m) throws MailException { + try { + Message m2 = m.bounce(JSU.toString(a)); + org.ibex.mail.protocol.SMTP.Outgoing.accept(m2); + Log.error(this, "BOUNCING! " + m2.summary()); + } catch (Exception e) { + Log.warn(this, e); + } + } }; } if (name.equals("mail.forward2") || name.equals("forward2")) { try { @@ -175,16 +203,11 @@ public class Script extends Target { } return null; } - if (name.equals("mail.forward") || name.equals("forward")) { return new Target() { - public void accept(Message m) throws MailException { - try { - Message m2 = Message.newMessage(m, m.envelopeFrom, new Address(JSU.toString(a))); - org.ibex.mail.protocol.SMTP.Outgoing.accept(m2); - } catch (Exception e) { - throw new MailException(e.toString()); - } - } - }; } + if (name.equals("mail.forward") || name.equals("forward")) { + Message m2 = Message.newMessage(Script.this.m, Script.this.m.envelopeFrom, new Address(JSU.toString(a))); + org.ibex.mail.protocol.SMTP.Outgoing.attempt(m2); + return Drop.instance; + } if (name.equals("log.debug") || name.equals("debug")) { JSU.debug(a== null ? "**null**" : JSU.toString(a)); return null; } if (name.equals("log.info") || name.equals("info")) { JSU.info(a== null ? "**null**" : JSU.toString(a)); return null; } if (name.equals("log.warn") || name.equals("warn")) { JSU.warn(a== null ? "**null**" : JSU.toString(a)); return null; } @@ -236,4 +259,6 @@ public class Script extends Target { } }; } + + private static abstract class JSTarget extends JS.Obj implements Target { } }