Conhecendo o Apache James

Daniel Dias
Nov 15, 2018 · 8 min read

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 .


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 .


Iniciando o Apache James Server

Agora vamos na pasta bin e vamos executar o seguinte comando no shell :

o log pode ser visto na pasta “log” no arquivo “wrapper.log” .

agora para terminar o servidor execute o seguinte comando :


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 :

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 :

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 :

agora digite o seguinte comando para iniciar :

aqui pode ser qualquer nome.

agora iremo passar o e-mail de quem esta enviando :

vamos passar o e-mail de quem vai receber :

agora vamos iniciar a transferia do conteúdo da mensagem, então digite a seguinte comando :

vamos inserir um assunto para o nosso e-mail e em seguida do corpo da mensagem, de enter e escreva a sua mensagem :

para sair digite :

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 :

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 :

feito isso, basta rodar o seguinte comando maven para fazer o build do projeto :

e em seguida executar :

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

SouJava Board Member, JCP Member, JSR-354 (Money), JSR-371 (MVC 1.0), JSR-382 (Configuration 1.0) specifications contributors, Expert Group JSR-385 (UoM 2.0) and Eclipse Committer, is taking the first steps in contributing Open Source projects.

Daniel Dias

Written by

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

Daniel Dias

SouJava Board Member, JCP Member, JSR-354 (Money), JSR-371 (MVC 1.0), JSR-382 (Configuration 1.0) specifications contributors, Expert Group JSR-385 (UoM 2.0) and Eclipse Committer, is taking the first steps in contributing Open Source projects.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade