Created
December 28, 2011 02:06
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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