import java.util.*;
import java.text.*;
+//
+// - better matching syntax:
+// - src-ip
+// - from *@foo.com
+// - list-id
+// - ==> {discard, refuse, bounce}
+//
+
public class Script extends JS.Obj implements Target {
private static final JS.Method METHOD = new JS.Method();
this.m = m;
try {
Object ret = js.call(null, new JS[] { m });
- Log.debug(this, "configuration script returned " + ret);
+ Log.warn(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);
case "mail.drop": return METHOD;
case "mail.razor": return getSub("mail.razor");
case "mail.razor.check": return METHOD;
+ case "mail.procmail": /* FEATURE */ return null;
+ case "mail.vacation": /* FEATURE */ return null;
case "mail.dcc": return getSub("mail.dcc");
case "mail.dcc.check": return METHOD;
case "mail.bounce": return METHOD;
}
if (name.equals("mail.shell")) {
// FIXME: EEEEEVIL!
- Log.warn("dbug", args[0].getClass().getName());
- Log.warn("dbug", args[1].getClass().getName());
- final Process p = Runtime.getRuntime().exec(JSU.toString(args[1]));
- Message m = (Message)args[0];
+ Log.warn("dbug", a.getClass().getName());
+ Log.warn("dbug", b.getClass().getName());
+ Message m = (Message)b;
+ final Process p = Runtime.getRuntime().exec(JSU.toString(a));
new Thread() {
public void run() {
try {
}.start();
OutputStream os = p.getOutputStream();
Stream stream = new Stream(os);
- m.getStream().transcribe(stream);
+
+ // why do I need to go via an sb here?
+ StringBuffer sb = new StringBuffer();
+ m.getBody().getStream().transcribe(sb);
+ stream.println(sb.toString());
+
+ stream.flush();
stream.close();
p.waitFor();
return null;
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 = "";
Address from = null, to = null, envelopeFrom = null, envelopeTo = null;
JS.Enumeration e = m.keys();
+ Headers headers = new Headers();
for(; e.hasNext();) {
JS key = (JS)e.next();
JS val = m.get(key) == null ? null : m.get(key);
if ("body".equalsIgnoreCase(JSU.toString(key))) body = JSU.toString(val);
- else headers.append(JSU.toString(key) + ": " + JSU.toString(val) + "\r\n");
+ else headers = new Headers(headers, new String[] { JSU.toString(key), JSU.toString(val) });
if ("from".equalsIgnoreCase(JSU.toString(key))) from = Address.parse(JSU.toString(val));
if ("to".equalsIgnoreCase(JSU.toString(key))) to = Address.parse(JSU.toString(val));
if ("envelopeFrom".equalsIgnoreCase(JSU.toString(key))) envelopeFrom = Address.parse(JSU.toString(val));
if (envelopeTo == null) envelopeTo = to;
if (envelopeFrom == null) envelopeFrom = from;
Message message =
- Message.newMessage(Fountain.Util.concat(Fountain.Util.create(headers.toString()),
- Fountain.Util.create("\r\n"),
- Fountain.Util.create(body)),
- envelopeFrom,
- envelopeTo
- );
+ Message.newMessageFromHeadersAndBody(headers, Fountain.Util.create(body), envelopeFrom, envelopeTo);
boolean ok = false;
try {
}
if (name.equals("mail.forward2") || name.equals("forward2")) {
try {
- Message m2 = Message.newMessage(m,
- m.envelopeFrom,
- new Address(JSU.toString(a)));
+ Message m2 = m.withEnvelope(m.envelopeFrom, new Address(JSU.toString(a)));
org.ibex.mail.SMTP.Outgoing.enqueue(m2);
} catch (Exception e) {
Log.warn(this, e);
return null;
}
if (name.equals("mail.forward") || name.equals("forward")) {
- Message m2 = Message.newMessage(Script.this.m, Script.this.m.envelopeFrom, new Address(JSU.toString(a)));
+ Message m2 = Script.this.m.withEnvelope(Script.this.m.envelopeFrom, new Address(JSU.toString(a)));
org.ibex.mail.SMTP.Outgoing.attempt(m2, false);
return Drop.instance;
}
}
}
-
}