Search code examples
javatestingjunitgreenmail

greenmail server not receiving the mail


  • My Unit Test for class for email through Greenmail

    public class GreenMailTest {

    private GreenMail greenMail;
    private EmailServiceImpl emailService = new EmailServiceImpl();
    
    private MessageTemplateService messageTemplateService;
    
    private EmailProperties emailProperties;
    
    private Properties props;
    
     private static final String USER_PASSWORD = "abcdef123";
        private static final String USER_NAME = "hascode";
        private static final String EMAIL_USER_ADDRESS = "hascode@localhost";
        private static final String EMAIL_TO = "[email protected]";
        private static final String EMAIL_SUBJECT = "Test E-Mail";
        private static final String EMAIL_TEXT = "This is a test e-mail.";
        private static final String LOCALHOST = "localhost";
       // private GreenMail mailServer;
    
    
    @Before
    public void testSmtpInit() {
        //ServerSetup setup = new ServerSetup();
        greenMail = new GreenMail(ServerSetupTest.SMTP);
        greenMail.start();
        messageTemplateService = mock(MessageTemplateService.class);
        emailProperties = mock(EmailProperties.class);
        emailService.setEmailProperties(emailProperties);
    }
    
    @Test
    public void testEmail() throws InterruptedException, IOException {
    
        greenMail.setUser(EMAIL_USER_ADDRESS, USER_NAME, USER_PASSWORD);
    
            // create the javax.mail stack with session, message and transport ..
            Properties props = System.getProperties();
            props.put("mail.smtp.host", LOCALHOST);
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", ServerSetupTest.SMTP.getPort());
            Session session = Session.getInstance(props, null);
            Message msg = new MimeMessage(session);
            try {
                msg.setFrom(new InternetAddress(EMAIL_TO));
                 msg.setRecipients(Message.RecipientType.TO,
                            InternetAddress.parse(EMAIL_USER_ADDRESS, false));
                            msg.setSubject(EMAIL_SUBJECT);
                            msg.setText(EMAIL_TEXT);
                            msg.setSentDate(new Date());
                            Transport t =  session.getTransport("smtp");
                            t.connect(EMAIL_USER_ADDRESS, USER_PASSWORD);
                            t.sendMessage(msg, msg.getAllRecipients());
                           // assertEquals("250 OK\n", t.getLastServerResponse());
                            t.close();
            } catch (MessagingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
    
    
    
        // fetch messages from server
        MimeMessage[] messages = greenMail.getReceivedMessages();
    
  • I used this code to test the email server on junit.

  • But the server does not return any message

  • what i did wrong.

  • I change the code please review it


Solution

  • GreenMail is running at localhost. Adjust your smtp host accordingly:

    props.put("mail.smtp.host", "localhost");
    

    Edit

    To summarize the large number of comments: The additional problem came from fact that mock-javamail was on the classpath.