Conhecendo o Apache James

Daniel Dias
Daniel Dias
Published in
8 min readNov 15, 2018

--

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 :

--

--

Daniel Dias
Daniel Dias

SouJava Board Member, JCP Member, JSR-371 (MVC 1.0), JSR-382 (Config) specifications contributor, EG JSR-385 (UoM) and Eclipse Committer .