Mentawai Web Framework

Enviando Email

Você provavelmente precisará enviar uma mensagem de boas-vindas por email para seus novos usuários quando eles se cadastrarem no seu site, certo? O Mentawai disponibiliza a você uma maneira fácil de enviar mensagens de email através da excelente API Jakarta Commons Email. O código da Commons Email foi incorporado ao código do Mentawai (dentro da package org.mentawai.mail), logo você não precisa instalar ou se preocupar com nada para utilizar essa funcionalidade.

Entretanto, para enviar um email do Java, você precisa de duas extensões da linguagem: JavaMail (javax.mail.*) e JAF (javax.activation.*). O Mentawai vem com os arquivos jar para essas extensões dentro de seu diretório /lib, então tudo que você tem a fazer e pegar o mail.jar e o activation.jar de lá e colocá-los dentro do diretório /WEB-INF/lib da sua aplicação.

Vejamos um exemplo:

import org.mentawai.core.*;
import org.mentawai.mail.*;

public class ApplicationManager extends org.mentawai.core.ApplicationManager {
    
    public void init() {
        Email.setDefaultAuthentication("cadastro@mentawai.com.br", "whatever");
        Email.setDefaultHostName("smtp.mentawai.com.br");
        Email.setDefaultFrom("cadastro@mentawai.com.br", "Mentawai");
    }
	
    public void loadActions() {
        // ...
    }
}
        

Nós podemos usar o método init() de nosso ApplicationManager para definir os valores-padrão para o nome do host, o smtp e a autenticação (se necessária). Podemos também definir um padrão de remetende de email e nome.

Agora, para enviar uma mensagem de email para uma action, tudo que você tem que fazer está abaixo:

import org.mentawai.core.*;
import org.mentawai.mail.*;

public class HelloEmail extends BaseAction {
	
	public String execute() throws Exception {
        try {
            SimpleEmail email = new SimpleEmail();
            email.addTo("soliveira@smartjava.com.br", "Sergio Oliveira");
            email.setSubject("Testing...");
            email.setMsg("Hi,\n\nBye!");
            email.send();            
        } catch(Exception e) {
            e.printStackTrace();
        }
        return SUCCESS;
	}
}
        

Há também o suporte para mensagens de email HTML (org.mentawai.mail.HtmlMail) e anexos (org.mentawai.mail.MultiPartEmail). Favor consultar a API documentation para mais detalhes sobre essas classes.


Usando templates de email localizados

Você pode usar a poderosa interface org.mentawai.mail.Letter junto com uma de suas implementações para enviar mensagens de email localizadas. A org.mentawai.mail.VelocityLetter que vem com Mentawai, permite você processar templates velocity para gerar mensagens de email.

Para usar o Velocity você deve colocar o arquivo jar do velocity dentro do diretório /WEB-INF/lib da sua aplicação. Você pode encontrar o arquivo velocity-dep-1.4.jar dentro do diretório /lib do Mentawai.

Veja o exemplo abaixo:

        try {
            Letter letter = new VelocityLetter("hello.html"); // default dir is /letters
            letter.setAttribute("name", "Sergio");
            letter.setAttribute("age", "29");
            String msg = letter.getText(loc); // loc comes from action
            
            HtmlEmail email = new HtmlEmail();
            email.addTo("soliveira@mentawai.com.br", "Sergio Oliveira");
            email.setSubject("Testing...");
            email.setHtmlMsg(msg);
            email.send(); 
        } catch(Exception e) {
            e.printStackTrace();
            throw new ActionException(e);
        }        
        

Observe que a classe VelocityLetter procura por arquivos no diretório /letters por padrão. Você pode mudar isso passando um novo diretório para o construtor. (Veja a documentação da API para mais detalhes)

No exemplo acima, se o locale do usuário for en_US, o arquivo de template será /letters/en_US/hello.html. Observe que você deve deixar seus templates no diretório correspondente a seu locale.