-- ‘Happy path’ processing of a spam message. conn = mt.connect("inet:3333@localhost") assert(conn, "could not open connection") local err = mt.conninfo(conn, "client.gluet.ch", "123.123.123.123") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.helo(conn, "mail.gluet.ch") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.mailfrom(conn, "from@gluet.ch") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.rcptto(conn, "to@gluet.ch") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) SMFIC_DATA = string.byte("T") -- SMFIC_DATA not exported by miltertest local err = mt.macro(conn, SMFIC_DATA, "i", "1234567ABC", "j", "localhost", "_", "client.gluet.ch [123.123.123.123]", "{tls_version}", "TLSv1.2", "v", "Postfix 3.3.0") assert(err == nil, err) local err = mt.data(conn) assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.header(conn, "From", "from@gluet.ch") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.header(conn, "To", "to@gluet.ch") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.header(conn, "Subject", "Test message") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.header(conn, "Message-ID", string.format("<%06d@gluet.ch>", math.random(999999))) assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.header(conn, "Date", os.date("%a, %d %b %Y %H:%M:%S %Z")) assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) -- Incoming foreign SpamAssassin headers, to be replaced or deleted. local err = mt.header(conn, "X-Spam-Checker-Version", "BogusChecker 1.0.0") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.header(conn, "X-Spam-Report", "Bogus report") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.eoh(conn) assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.bodystring(conn, "HI!!! You have won a BILLION dollars!!!!") assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_CONTINUE) local err = mt.eom(conn) assert(err == nil, err) assert(mt.getreply(conn) == SMFIR_ACCEPT) assert(mt.eom_check(conn, MT_HDRDELETE, "X-Spam-Checker-Version")) assert(mt.eom_check(conn, MT_HDRADD, "X-Spam-Checker-Version", " MyChecker 1.0.0")) assert(mt.eom_check(conn, MT_HDRADD, "X-Spam-Flag", " YES")) assert(mt.eom_check(conn, MT_HDRADD, "X-Spam-Custom", " Custom-Value")) assert(mt.eom_check(conn, MT_HDRDELETE, "X-Spam-Report")) assert(mt.eom_check(conn, MT_HDRCHANGE, "Subject", " [SPAM] Test message")) assert(mt.eom_check(conn, MT_HDRADD, "Content-Type", " multipart/mixed; ...")) assert(mt.eom_check(conn, MT_BODYCHANGE, "Spam detection software has identified ...")) local err = mt.disconnect(conn) assert(err == nil, err)