Configurando e enviando Email com Mail Subsystem

Após um pequeno hiato, estamos de volta. Desta vez vou passar os paranauês para enviar um email com Wildfly 10 pelo Subsystem de Mail. Sem mais delongas, vamos ao código, lembre-se que todo source está no meu github.

O Wildfly provê um subsystem que mail que facilita a configuração de protocolos de envio de email, como SMTP, POP3 e IMAP por exemplo. Para teste vamos utilizar um “simulador” de SMTP que irá criar um servirdor SMTP para os testes. Então o primeiro passo é instalar e configurar o Wildfly 10 na sua máquina, como instruído no primeiro post da série em seguida:

  • Fazer o download da ultima versão do fakeSMTP;
  • Inicializar o Wildfly:
sudo -u wildfly $JBOSS_HOME/bin/standalone.sh
  • Iniciar e conectar o jboss-cli.sh para configurarmos o subsystem:
sh $JBOSS_HOME/bin/jboss-cli.sh -c
  • Pelo CLI vamos criar o subsystem, para isso escreva os seguintes comandos:
# Start batching commands
batch

# Create the custom MyOtherMail mail session
/subsystem=mail/mail-session=OutroMail:add(jndi-name=java:jboss/mail/OutroMail)

# Configure the custom SMTP
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=meu-smtp-binding:add(host=localhost,port=2525)

# Add the custom socket binding groups to the custom MyOtherMail mail session
/subsystem=mail/mail-session=OutroMail/server=smtp:add(outbound-socket-binding-ref=meu-smtp-binding)

# Run the batch commands
run-batch

# Reload the server configuration
reload
...
<dependency>
 <groupId>com.sun.mail</groupId>
 <artifactId>javax.mail</artifactId>
 </dependency>

<dependency>
 <groupId>javax.enterprise</groupId>
 <artifactId>cdi-api</artifactId>
 <scope>provided</scope>
 </dependency>

<dependency>
 <groupId>org.jboss.spec.javax.annotation</groupId>
 <artifactId>jboss-annotations-api_1.2_spec</artifactId>
 <scope>provided</scope>
 </dependency>

<dependency>
 <groupId>org.jboss.spec.javax.ejb</groupId>
 <artifactId>jboss-ejb-api_3.2_spec</artifactId>
 <scope>provided</scope>
 </dependency>

<dependency>
 <groupId>org.jboss.spec.javax.servlet</groupId>
 <artifactId>jboss-servlet-api_3.1_spec</artifactId>
 <scope>provided</scope>
 </dependency>
...
  • Vamos agora criar a classe que irá “pegar” as configurações criadas anteriormente e enviar o email.

import java.io.Serializable;

import javax.annotation.Resource;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

@Named
@SessionScoped
public class Email implements Serializable {
    private static final long serialVersionUID = 1L;

    @Resource(mappedName = "java:jboss/mail/OutroMail")
    private Session mySession;

    public void send(final String from, final String to, final String subject, final String content) throws Exception {
         Message message = new MimeMessage(mySession);
         message.setFrom(new InternetAddress(from));
         Address toAddress = new InternetAddress(to);
         message.addRecipient(Message.RecipientType.TO, toAddress);
         message.setSubject(subject);
         message.setContent(content, "text/plain");
         Transport.send(message);
    }
}
  • Para se comunicar com a view e com nossa class Email.class vamos criar um servlet.
import java.io.IOException;

import javax.inject.Inject;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/email.do")
public class EnviaEmailServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Inject
	private Email email;

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		final String from = req.getParameter("from");
		final String to = req.getParameter("to");
		final String subject = req.getParameter("subject");
		final String content = req.getParameter("content");

		StringBuilder message = new StringBuilder();

		try {

			email.send(from, to, subject, content);
			message.append("Email enviado com sucesso");

		} catch (Exception e) {

			message.append("Erro ao enviar email");
			e.printStackTrace();

		} finally {

			req.setAttribute("message", message.toString());

			RequestDispatcher resultView = req.getRequestDispatcher("index.jsp");
			resultView.forward(req, resp);
		}
	}

}
  • E por fim nosso index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>email.jsp</title>
	</head>

 	<body>

        	<label style="color: red; width: 100%;text-align: left;">${message}</label>

<form id="email" action="email.do" method="POST">
<table>
<tr>
<td>From:</td>
<td>
 						<input type="text" id=from name="from" value="${novoEmail.from}" /></td>
</tr>
<tr>
<td>To:</td>
<td><input type="text" id=to name="to" value="${novoEmail.to}" /></td>
</tr>
<tr>
<td>Subject:</td>
<td><input type="text" id=subject name="subject" value="${novoEmail.subject}" /></td>
</tr>
<tr>
<td>Content:</td>
<td><textarea rows="5" cols="5" id=content name=content value="${novoEmail.content}"></textarea></td>
</tr>
</table>
<input id="register" type="submit" value="Enviar" /> 

 		</form>

	</body>
</html>
  • Próximos passos são:
    • Fazer o deploy da aplicação
    • Executar o jar do fakeSMTP: java -jar fakeSMTP-2.0.jar

Ao executar o fakeSMTP você deverá ver uma tela como a seguinte:

Configure a porta 2525 que foi a que utilizamos no subsystem, em seguir aperte o botão, start server.

Após os passos acima, acesse a url http://localhost:8080/mail/ e preencha o formulário como a seguir:

Clique em enviar e deverá aparecer uma messagem de sucesso: Email enviado com sucesso também é possível visualizar o email na janela do fakeSMTP:

Até a próxima.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.