My favorites | Português | Sign in

Como usar a interface JavaMail

O serviço de mensagens da API em Java suporta a interface JavaMail (javax.mail) para o envio de mensagens de e-mail.

Para obter mais informações, consulte a referência da API JavaMail da Sun.

Como enviar mensagens de e-mail

Para enviar uma mensagem de e-mail, o aplicativo prepara um objeto MimeMessage e o envia com o método estático send() na classe Transport. A mensagem é criada usando um objeto Session do JavaMail. O Session e o Transport funcionam com o serviço de mensagens do Google App Engine sem nenhuma configuração adicional.

import java.util.Properties;
import javax.mail.AddressException;
import javax.mail.InternetAddress;
import javax.mail.MessagingException;
import javax.mail.MimeMessage;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;

// ...
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        String msgBody = "...";

        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("admin@example.com"));
            msg.addRecipient(Message.RecipientType.TO,
                             new InternetAddress("user@example.com"));
            msg.setSubject("Your Example.com account has been activated");
            msg.setText(msgBody);
            Transport.send(msg);

        } catch (AddressException e) {
            // ...
        } catch (MessagingException e) {
            // ...
        }

As chamadas para o serviço de mensagens são assíncronas e retornam imediatamente. O serviço de mensagens gerencia o processo de contatação dos servidores de e-mail do destinatário e o processo de entrega da mensagem. Se houver algum problema durante o envio da mensagem para qualquer destinatário, ou se o servidor de e-mail do destinatário devolver uma mensagem, a mensagem de erro vai para o remetente.

Remetentes e destinatários

Os endereços de e-mail dos remetentes e destinatários são representados no JavaMail usando instâncias da classe InternetAddress. O construtor recebe o endereço de e-mail como uma string e emite uma AddressException se o endereço não se parecer com um endereço de e-mail válido.

Para definir o endereço do remetente, o aplicativo chama o método setFrom() no objeto MimeMessage. O remetente deve ser o endereço de um desenvolvedor registrado do aplicativo ou o endereço do usuário da solicitação conectado atualmente com uma conta do Google.

Vários métodos no objeto MimeMessage estabelecem os destinatários. O método addRecipient() recebe o tipo e um endereço de um destinatário e adiciona-o à lista de destinatários daquele tipo. O tipo de destinatário pode ser Message.RecipientType.TO, Message.RecipientType.CC ou Message.RecipientType.BCC.

Use o método setReplyTo() para definir um endereço para o campo "responder".

Mensagens e cabeçalhos

Para estabelecer o conteúdo da mensagem, chame os métodos no objeto MimeMessage. O método setSubject() define o assunto, enquanto o método setText() define o conteúdo do corpo (texto sem formatação).

Por segurança, o serviço de mensagens não permite cabeçalhos arbitrários nas mensagens de saída. Alguns cabeçalhos são substituídos pelo serviço de mensagens, como a data de envio da mensagem. Os outros cabeçalhos adicionados às mensagens de saída são removidos.

Mensagens em várias partes

Você pode enviar uma mensagem com arquivos anexos, ou com um corpo de mensagem HTML além do texto sem formatação, usando as mensagens em várias partes. Você cria um objeto MimeMultipart para conter as partes, cria um objeto MimeBodyPart para cada anexo ou corpo de mensagem alternativo e adiciona-o ao recipiente. Por último, você atribui o recipiente ao conteúdo do MimeMessage.

import javax.mail.MimeBodyPart;
import javax.mail.MimeMultipart;
import javax.mail.Multipart;
import javax.activation.DataHandler;

// ...
        String htmlBody;        // ...
        byte[] attachmentData;  // ...

        Multipart mp = new MimeMultipart();

        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(htmlBody, "text/html");
        mp.addBodyPart(htmlPart);

        MimeBodyPart attachment = new MimeBodyPart();
        attachment.setFileName("manual.pdf");
        attachment.setContent(attachmentData, "application/pdf");
        mp.addBodyPart(attachment);

        message.setContent(mp);

Por segurança, as partes da mensagem e os anexos devem ser um dos vários tipos permitidos, e os nomes de arquivo dos anexos devem terminar em uma extensão reconhecida pelo tipo. Para obter uma lista de tipos e extensões de nome de arquivo permitidos, consulte Visão geral: Anexos.

Recursos do JavaMail não suportados

Um aplicativo não consegue receber mensagens de e-mail.

Um aplicativo não consegue usar a interface JavaMail para se conectar com outros serviços de mensagens para enviar ou receber mensagens de e-mail. A configuração SMTP adicionada ao Transport ou Session é ignorada.

Recursos da API de nível inferior

Todos os recursos da API do serviço de mensagens de nível inferior estão disponíveis na interface JavaMail.

A API de nível inferior inclui um método de conveniência para enviar e-mails a todos os administradores do aplicativo. Para fazer isso no JavaMail, use admin@. ("admin", arroba e um ponto) como o destinatário.