Conhecendo o Apache James
Neste post vamos aprender um pouco sobre o Apache James que serve tanto para uso pessoal quanto para uso corporativo como uma solução de tratamento de e-mails .
Particularmente eu utilizei esse projeto quando estava trabalhando no Mailer como um Microservice para lidar com o processo de envio de emails .
O motivo de utilizar o mesmo é bem simples, uma que queria aprender algo novo e outra que eu queria economizar minha franquia de internet 3g, que na época que eu estava utilizando, de vez enquanto ficava sem internet por 2 semanas, então tive que encontrar um solução alternativa para continuar meu trabalho .
Introdução ao Apache James
Apache James (Java Apache Mail Enterprise Server) possui uma arquitetura modular baseada em um rico conjunto de componentes modernos e eficientes que fornece servidores de e-mail completos, estáveis, seguros e extensivos em execução na JVM .
James é perfeito para criarmos nossa própria solução de tratamento de e-mails, reunindo os componentes de que você precisa graças a plataforma de “Inversion of Control mail ” oferecida e vai personalizando ainda mais as regras de filtragem e roteamento usando o James Mailet Container.
James é 100% Java puro, executando no Java 6, porém para alguns componentes opcionais pode requerer o Java 8 .
Os componentes do James são :
- Emailing Protocols: SMTP, LMTP, POP3, IMAP, ManageSieve, JMAP
- Mailet Container: agentes de processamento de e-mail independentes, extensíveis e plugáveis.
- Storage API: Mailbox API, Search API, User API
- Storage Implementations: Cassandra, PostgreSQL, HSQLDB, MySQL, ElasticSearch
- Administration: JMX, Rest, Command Line
- James Core
Além disso James também pode ser usado como Agente de Transferência de Correio, ativando somente o SMTP ou como um Agente de Entrega de Mensagens IMAP.
Apache James Server
Para esse post usaremos o James Server.
James Server é 100% Java puro, projetado para ser uma solução de e-mail empresarial completa e portátil .
Jamer Server suporta atualmente os seguinte protocolos SMTP, LMTP, POP3, IMAP4, ManagerSieve.
Além disso, James Server é capaz de armazenar dados de usuários e mensagens em qualquer banco de dados compativel com JPA, no Cassandra em sistema de arquivo (Maildir).
James Server fornece um poderoso e flexível mecanismo de correio através dos suporte para a API do Apache Mailet. Com sua arquitetura de pipeline do Mailet, o James Server pode ser usado não só para fornecer serviços de e-mail padrão, mas também para implementar aplicativos de e-mail personalizados.
Os objetivos do James Server são :
- Portabilidade completa => 100% Java puro, baseado na plataforma Java 2 e na api JavaMail 1.3 .
- Abstração de protocolo => Ao contrário de outros mecanismos de correio, os protocolos são vistos apenas como “linguagens de comunicação” que governam as comunicações entre clientes e o servidor. O Apache James não está vinculado a nenhum protocolo em particular, mas segue um design de servidor abstraído (como o JavaMail fez no lado do cliente).
- Solução completa => O sistema de e-mail é capaz de lidar com transporte e armazenamento de e-mail em um único aplicativo de servidor. James trabalha sozinho sem a necessidade de qualquer outro servidor ou solução.
- Suporte ao Mailet => James suporta a API do Apache Mailet. Um Mailet é uma parte discreta da lógica de processamento de correio que é incorporada em um processamento de servidor de correio compatível com o Mailet. Este padrão fácil de escrever e fácil de usar permite que os desenvolvedores criem sistemas de e-mail personalizados e poderosos.
- Abstração de recursos => Como os protocolos, os recursos são abstraídos e acessados por meio de interfaces definidas (como JPA para contas de caixa de correio ou de usuário em RDBMSs). O servidor é altamente modular e reutiliza soluções de outros projetos.
Obtendo o Apache James Server
Vamos fazer o download do James Server para isso clique nesse link isso ira baixa um arquivo zip, em seguida descompacta o mesmo .
Nas plataformas Linux / Unix, o acesso root será necessário para executar o James (o acesso às portas abaixo de 1024 é geralmente restrito ao usuário root). Como SMTP, POP3 e IMAP4 precisam abrir soquetes de servidor em tais portas nas configurações padrão, James requer acesso root.
Em plataformas Windows, você também precisa executar o privilégio James como Administrador.No Linux, para rodar o script startup / shutdown através do comando 'james', você também precisa da libc6 (no Ubuntu, por exemplo: sudo apt-get install libc6-i386 libc6-dev-i386 ).fonte: http://james.apache.org/server/install.html
Configurando o Apache James Server
Uma vez descompactado o zip, o próximo passo é ajustar a configuração inicial.
Todos os arquivos de configuração estão incorporados em jars. Enviamos na pasta conf os arquivos de configuração que podem ser editados para atender às suas necessidades.
O James Server já vem com algumas configurações por padrão .
No entanto, pelo menos na minha maquina ele estava não estava reconhecendo o comando java mesmo tendo o JAVA_HOME configurado.
para isso vamos alterar o arquivo wrapper.conf que fica dentro da pasta config e vamos alterar a linha bastando passar o caminho da sua JDK .
# Java Application
wrapper.java.command=/home/daniel/desenvolvimento/graalvm-ce-1.0.0-rc2/bin/java
Iniciando o Apache James Server
Agora vamos na pasta bin e vamos executar o seguinte comando no shell :
sudo ./james start
o log pode ser visto na pasta “log” no arquivo “wrapper.log” .
agora para terminar o servidor execute o seguinte comando :
sudo ./james stop
Criando Dominios e Usuarios
Depois que iniciar o nosso servido, será necessário criar um dominio e contas de usuários antes do James está 100% funcional.
então abra novamente o prompt e execute o seguinte comando dentro da pasta bin para adiciona um novo dominio :
./james-cli.sh adddomain soujava.rio.org.br
se tudo certo vai ser exibido essas mensagens :
agora vamos criar uns usuario para o nosso dominio “soujava.rio.org.br”
então execute o na mesma pasta o seguinte comando :
./james-cli.sh adduser daniel@soujava.rio.org.br 123456./james-cli.sh adduser noticias.rio@soujava.rio.org.br 123456
aqui criamos dois Usuários um “Daniel” e um “noticias.rio” com o domínio que criamos e ambas as contas com a senha 123456.
Testando o Apache James Server
Agora que criamos um dominio e usuários , vamos fazer um teste de envio de e-mail para um dos usuários.
então abra novamente o promtp e execute os seguintes comandos :
1 vamos nos conectar via telnet ao nosso servidor na porta 25 do SMTP :
> telnet localhost 25
agora digite o seguinte comando para iniciar :
ehlo teste
aqui pode ser qualquer nome.
agora iremo passar o e-mail de quem esta enviando :
mail from:<noticias.rio@soujava.rio.org.br>
vamos passar o e-mail de quem vai receber :
rcpt to:<daniel@soujava.rio.org.br>
agora vamos iniciar a transferia do conteúdo da mensagem, então digite a seguinte comando :
data
vamos inserir um assunto para o nosso e-mail e em seguida do corpo da mensagem, de enter e escreva a sua mensagem :
subject: teste
para sair digite :
quit
pronto nosso e-mail foi enviado para “daniel@soujava.rio.org.br” .
agora como vamos ver nossos e-mails ?
esse é o próximo passo .
Apache Hupa
O Hupa é um aplicativo de webmail baseado em Rich IMAP escrito em GWT (Google Web Toolkit).
Hupa foi inteiramente escrito em java para ser coerente com a linguagem usada no projeto James. E tem sido uma referência de um desenvolvimento usando boas práticas GWT (padrão MVP e teste unitário).
O Hupa é um cliente de e-mail funcional e bem projetado, pronto para ler, enviar e gerenciar mensagens, mas ainda carece de muitos recursos que os clientes de e-mail têm atualmente.
faça o download do arquivo .war .
por padrão ele esta configurado para funcionar com Gmail, porem a gente vai configurar o mesmo para esta funcionando com o nosso servidor local, para isso crie um arquivo properties com o seguinte conteudo :
e execute o seguinte comando para rodar o Hupa :
java -Dhupa.config.file=your_hupa_properties_file -jar hupa-0.0.3.war
e acesse o seguinte endereço : localhost:8282 e vai abrir a seguinte tela :
agora basta fazermos login com um dos usuários que criamos, no caso vou entrar com “daniel@soujava.rio.org.br” e senha “123456”:
ao entra vera o nosso e-mail, porém por algum motivo ele não exibi o remetente e nem a mensagem, para ver a mesma , a gente que que clicar na mensagem e em seguida em “ Show raw message” :
legal não ?
pois bem agora vamos ver isso com Java.
Enviando E-mail com JavaMail
Bem eu já tenho uma aplicação feita em Struts 1 que tem uma função de enviar um e-mail para o usuário cadastrado no banco a sua senha recuperada.
Então primeiramente faça o clone deste repositório ou baixe .
feito isso, crie um novo usuário no James :
./james-cli.sh adduser nao-responda@soujava.rio.org.br 123456
feito isso, basta rodar o seguinte comando maven para fazer o build do projeto :
mvn clean package payara-micro:bundle
e em seguida executar :
java -jar ~/git/Livraria-XPTO-Sistema-de-Reservas-de-Livros-On-Line/target/Livraria-XPTO---Sistema-de-Reservas-de-Livros-On-Line-0.0.1-SNAPSHOT-microbundle.jar
após isso acessar localhost:8080 e vai abri a seguinte tela :
e va em “Cadastre-se” e preencha o formulário com um dos e-mails que criamos, no caso vou utilizar o “daniel@soujava.rio.org.br” :
e em seguida os dados serão persistidos no H2 e vai voltar para a tela principal .
agora basta clicar em “ Esqueceu sua senha ? Clique aqui” e preencha com o e-mail cadastrado :
pronto, basta olhar a sua caixa de correio do James no Hupa e vai ver que o e-mail de recuperação de senha está la :
o código do envio de e-mail pode ser visto aqui :
bem isso é tudo. Espero que tenham gostado de aprender um pouco sobre Apache James e quem sabe usar em seus projetos pessoais ou até levar isso para sua empresa.
Código-fonte : https://github.com/Daniel-Dos/Livraria-XPTO-Sistema-de-Reservas-de-Livros-On-Line