Conhecendo o Apache James

Daniel Dias
Nov 15, 2018 · 8 min read

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 .

  • 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

Apache James Server

Para esse post usaremos o James Server.

  • 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.

# 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
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.

./james-cli.sh adddomain soujava.rio.org.br
./james-cli.sh adduser daniel@soujava.rio.org.br 123456./james-cli.sh adduser noticias.rio@soujava.rio.org.br 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.

> telnet localhost 25
ehlo teste
mail from:<noticias.rio@soujava.rio.org.br>
rcpt to:<daniel@soujava.rio.org.br>
data
subject: teste
quit

Apache Hupa

O Hupa é um aplicativo de webmail baseado em Rich IMAP escrito em GWT (Google Web Toolkit).

java -Dhupa.config.file=your_hupa_properties_file -jar hupa-0.0.3.war

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.

./james-cli.sh adduser nao-responda@soujava.rio.org.br 123456
mvn clean package payara-micro:bundle
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

Daniel Dias

Board Member da SouJava, membro da JCP, contribuidor das especificações JSR-371 ( MVC 1.0 ), JSR-382 ( Configuration 1.0 ) , Expert Group JSR-385 ( Units of Measurement 2.0 ) e Eclipse Committer , além de esta dando os primeiros passos nas contribuições de projetos Open Source

Daniel Dias

Written by

Board Member da SouJava, membro da JCP, contribuidor das especificações JSR-371 ( MVC 1.0 ), JSR-382 ( Config) e EG JSR-385 ( UoM) e Eclipse Committer

Daniel Dias

Board Member da SouJava, membro da JCP, contribuidor das especificações JSR-371 ( MVC 1.0 ), JSR-382 ( Configuration 1.0 ) , Expert Group JSR-385 ( Units of Measurement 2.0 ) e Eclipse Committer , além de esta dando os primeiros passos nas contribuições de projetos Open Source