package dumbster import com.dumbster.smtp.SimpleSmtpServer import com.dumbster.smtp.SmtpMessage import org.springframework.mail.javamail.JavaMailSenderImpl /** * @author Burt Beckwith */ class Dumbster { def grailsApplication Integer port protected SimpleSmtpServer server /** * Starts the server; called by Spring, so shouldn't be called directly. */ @SuppressWarnings('Println') void start() { def conf = grailsApplication.config.dumbster if (conf.port) { port = conf.port } else { port = 587 while (true) { try { new ServerSocket(port).close() // update the mail plugin's JavaMailSender if available if (grailsApplication.mainContext.containsBean('mailSender')) { JavaMailSenderImpl mailSender = grailsApplication.mainContext.mailSender mailSender.port = port } break } catch (IOException e) { port++ if (port > 10000) { throw new BindException('Cannot find open port for Dumbster SMTP server') } } } } println "Dumbster is using port $port" server = SimpleSmtpServer.start(port) } /** * Stops the server; called by Spring, so shouldn't be called directly. */ void stop() { server?.stop() } /** * Remove all sent emails. Call this in the setUp() method in your integration tests. */ void reset() { if (!server) { return } for (Iterator iter = server.receivedEmail; iter.hasNext(); ) { iter.next() iter.remove() } } /** * Check if stopped. * @return true if the server was stopped (or never started) */ boolean isStopped() { server ? server.stopped : true } /** * Get all current messages. * @return the messages */ List getMessages() { server ? server.receivedEmail.collect { it } : [] } /** * Get the number of sent messages. * @return the number */ int getMessageCount() { server ? server.receivedEmailSize : 0 } }