package org.ibex.mail.target;
import org.ibex.js.*;
+import org.ibex.io.*;
import org.ibex.util.*;
import org.ibex.mail.*;
import org.ibex.mail.filter.*;
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();
Object ret = js.call(null, new JS[] { m });
Log.debug(this, "configuration script returned " + ret);
if (ret == null) throw new IOException("configuration script returned null");
+ while (ret instanceof JSReflection.Wrapper) ret = ((JSReflection.Wrapper)ret).unwrap();
if (ret instanceof Target) ((Target)ret).accept(m);
//else if (ret instanceof Filter) ((Filter)ret).process(m);
else throw new IOException("configuration script returned a " + ret.getClass().getName());
case "log.warn": return METHOD;
case "log.error": return METHOD;
case "list": return getSub("list");
+ case "url": return getSub("url");
+ case "url.encode": return METHOD;
case "mail": return getSub("mail");
case "mail.forward": return METHOD;
case "mail.forward2": return METHOD;
case "mail.send": return METHOD;
- case "mail.drop": return Drop.instance;
+ case "mail.attempt": return METHOD;
+ case "mail.later": return Later.instance;
+ case "mail.drop": return METHOD;
+ case "mail.razor": return getSub("mail.razor");
+ case "mail.razor.check": return METHOD;
+ case "mail.dcc": return getSub("mail.dcc");
+ case "mail.dcc.check": return METHOD;
case "mail.bounce": return METHOD;
+ case "mail.reject": 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"));
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);
}
final int nargs = args.length;
String name = JSU.toString(name0);
try {
+ if (name.equals("url.encode")) return JSU.S(java.net.URLEncoder.encode(JSU.toString(args[0])));
+ if (name.equals("mail.list")) return JSReflection.wrap(MailingList.getMailingList(JSU.toString(args[0])));
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 = "";
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.razor.check")) {
+ Process p = Runtime.getRuntime().exec("razor-check");
+ ((Message)args[0]).getStream().transcribe(new Stream(p.getOutputStream()), true);
+ return JSU.N(p.waitFor());
+ }
+ if (name.equals("mail.dcc.check")) {
+ Process p = Runtime.getRuntime().exec(new String[] { "dccproc", "-H" });
+ ((Message)args[0]).getStream().transcribe(new Stream(p.getOutputStream()), true);
+ StringBuffer ret = new StringBuffer();
+ new Stream(p.getInputStream()).transcribe(ret);
+ p.waitFor();
+ return JSU.S(ret.toString());
+ }
+ if (name.equals("mail.drop")) {
+ return args.length==0 ? new Drop() : new Drop(JSU.toString(args[0]));
+ }
if (name.equals("mail.bounce")) {
- return new Target() {
+ return new JSTarget() {
public void accept(Message m) throws MailException {
try {
Message m2 = m.bounce(JSU.toString(a));
return null;
}
if (name.equals("mail.forward") || name.equals("forward")) {
- Message m = (Message)a;
- Message m2 = Message.newMessage(m, m.envelopeFrom, new Address(JSU.toString(a)));
- org.ibex.mail.protocol.SMTP.Outgoing.attempt(m2);
+ Message m2 = Message.newMessage(Script.this.m, Script.this.m.envelopeFrom, new Address(JSU.toString(a)));
+ org.ibex.mail.protocol.SMTP.Outgoing.attempt(m2, false);
return Drop.instance;
}
+ if (name.equals("mail.reject"))
+ return new Reject(JSU.toString(a));
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; }
case 2:
if (name.equals("regexp")) {return new JSRegexp(a, b); }
}
+ } catch (MailException e) { throw e;
} catch (Exception e) {
Log.warn(this, "ibex."+name+"() threw: " + e);
Log.warn(this, e);
}
};
}
+
+ private static abstract class JSTarget extends JS.Obj implements Target { }
}