package org.keycloak.testsuite.util; import org.subethamail.smtp.MessageContext; import org.subethamail.smtp.MessageHandler; import org.subethamail.smtp.MessageHandlerFactory; import org.subethamail.smtp.RejectException; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.MimeMessage; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Properties; public class MessageHandlerFactoryImpl implements MessageHandlerFactory { MimeMessage message; public MessageHandler create(MessageContext ctx) { return new Handler(ctx); } class Handler implements MessageHandler { MessageContext ctx; public Handler(MessageContext ctx) { this.ctx = ctx; } public void from(String from) throws RejectException { System.out.println("FROM:" + from); } public void recipient(String recipient) throws RejectException { System.out.println("RECIPIENT:" + recipient); } public void data(InputStream data) throws IOException { String rawMail = this.convertStreamToString(data); Session session = Session.getDefaultInstance(new Properties()); InputStream is = new ByteArrayInputStream(rawMail.getBytes()); try { message = new MimeMessage(session, is); setMessage(message); } catch (MessagingException e) { e.printStackTrace(); } } public void done() { System.out.println("Finished"); } public String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } } public MimeMessage getMessage(){ return message; } public void setMessage(MimeMessage msg){ this.message = msg; } }