Skip to content

Instantly share code, notes, and snippets.

@kellyrob99
Created December 28, 2011 02:06
Show Gist options
  • Save kellyrob99/1525811 to your computer and use it in GitHub Desktop.
Save kellyrob99/1525811 to your computer and use it in GitHub Desktop.
Use Gretty to provide a JSON front end for a GreenMail smtp test server
@GrabResolver(name = 'gretty', root = 'http://groovypp.artifactoryonline.com/groovypp/libs-releases-local')
@Grab('org.mbte.groovypp:gretty:0.4.279')
@Grab('com.icegreen:greenmail:1.3.1b')
import javax.mail.internet.MimeMessage
import org.jboss.netty.channel.local.LocalAddress
import org.mbte.gretty.httpserver.GrettyServer
import com.icegreen.greenmail.user.*
import com.icegreen.greenmail.util.*
//create the greenmail server
ServerSetup setup = new ServerSetup(9090, null, "smtp")
GreenMail greenMail = new GreenMail(setup);
greenMail.start()
//add some test values
def subject = GreenMailUtil.&random
def body = GreenMailUtil.&random
GreenMailUser user = greenMail.setUser("[email protected]", "thekaptain", "");
GreenMailUtil.sendTextEmail(user.email, "[email protected]", subject(), body(), setup);
GreenMailUtil.sendTextEmail(user.email, "[email protected]", subject(), body(), setup);
/**
* Break down a MimeMessage into something we can easily compose into JSON
*/
def mimeMessageMapper = {MimeMessage msg ->
if (msg)
{
[subject: msg.subject,
sender: msg.from.collect {it.toString()},
headers: GreenMailUtil.getHeaders(msg),
body: GreenMailUtil.getBody(msg)]
}
else
{
'no message'
}
}
String[] args = binding.variables.args
def test = args?.length && args[0] == 'test'
final def notImpldResponse = [result: 'not implemented'].asImmutable()
GrettyServer server = new GrettyServer()
server.groovy = [
localAddress: !test ? new InetSocketAddress(9000) : new LocalAddress("test_server"),
//load all messages by default
defaultHandler: {
response.redirect "/get/"
},
public: {
get("/:operation/:key") {
def operation = request.parameters['operation']
def keyParam = request.parameters['key']
def key = (keyParam ? keyParam as int : -1)
switch (operation)
{
case "get":
if (key != null && key >= 0)
{
response.json = [result: mimeMessageMapper(getByIndex(greenMail.receivedMessages, key))]
} else
{
response.json = [result: greenMail.receivedMessages.collect(mimeMessageMapper)]
}
break
case "delete":
case "put":
default:
response.json = notImpldResponse
}
}
}]
server.start()
private MimeMessage getByIndex(MimeMessage[] messages, int key)
{
if (messages && messages.size() > key)
{
return messages[key]
} else
{
null
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment