Enviar correio com a API Mail

A API do serviço de correio para Java suporta a interface JavaMail (javax.mail) para enviar mensagens de email.

Antes de começar

Registe os seus emails de remetente como remetentes autorizados. Para mais informações, consulte quem pode enviar emails.

Enviar mensagens de email

Para enviar mensagens de email, use as classes JavaMail incluídas no SDK do App Engine.

Quando cria uma sessão JavaMail, se não fornecer nenhuma configuração do servidor SMTP, o App Engine usa o serviço Mail para enviar mensagens. Em alternativa, adicione a configuração SMTP para fornecedores de correio eletrónico de terceiros suportados, como Mailgun, Mailjet ou SendGrid.

Para enviar uma mensagem:

  1. Crie uma mensagem com um objeto JavaMail Session.

  2. Crie um objeto MimeMessage.

  3. Para definir o remetente e o destinatário da mensagem, use a classe InternetAddress.

    1. Identifique o remetente chamando o método setFrom() no objeto MimeMessage. Opcionalmente, pode fornecer um nome pessoal como uma string no segundo parâmetro.

    2. Identifique o destinatário transmitindo um tipo de destinatário e um endereço ao método addRecipient(). O tipo de destinatário pode ser Message.RecipientType.TO, Message.RecipientType.CC ou Message.RecipientType.BCC.

    O construtor InternetAddress gera um AddressException se o endereço de email parecer inválido.

  4. Para definir um endereço "Responder a", use o método setReplyTo().

  5. Estabeleça o conteúdo da mensagem chamando métodos no objeto MimeMessage. Defina o assunto com setSubject() e defina o conteúdo do corpo de texto simples com setText().

  6. Para enviar a mensagem, use o método estático send() na classe Transport.

O serviço de correio permite-lhe especificar um conjunto limitado de cabeçalhos em mensagens de email enviadas. Para mais informações, consulte o artigo Cabeçalhos opcionais que pode usar.

O seguinte exemplo de código demonstra como enviar correio:

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

try {
  Message msg = new MimeMessage(session);
  msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
  msg.addRecipient(Message.RecipientType.TO,
                   new InternetAddress("user@example.com", "Mr. User"));
  msg.setSubject("Your Example.com account has been activated");
  msg.setText("This is a test");
  Transport.send(msg);
} catch (AddressException e) {
  // ...
} catch (MessagingException e) {
  // ...
} catch (UnsupportedEncodingException e) {
  // ...
}

As chamadas para o serviço de correio são assíncronas e são devolvidas imediatamente. O serviço de correio gere o processo de contacto com os servidores de correio dos destinatários e de entrega da mensagem. Se houver um problema ao enviar a mensagem a qualquer destinatário ou se o servidor de email de um destinatário devolver uma mensagem de "rejeição", a mensagem de erro é enviada ao remetente.

Enviar mensagens multipartes

Pode enviar mensagens multipartes, como uma mensagem com anexos de ficheiros ou uma mensagem com um corpo de mensagem de texto simples e um corpo de mensagem HTML.

Para enviar uma mensagem multipartes:

  1. Crie um objeto MimeMultipart para conter as partes e, em seguida, crie um objeto MimeBodyPart para cada anexo ou corpo da mensagem alternativo e adicione-o ao contentor.'

  2. Atribua o contentor ao conteúdo para MimeMessage.

O seguinte exemplo de código demonstra como enviar uma mensagem multipartes:

String htmlBody = "";          // ...
byte[] attachmentData = null;  // ...
Multipart mp = new MimeMultipart();

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

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

msg.setContent(mp);

Por motivos de segurança, as partes das mensagens e os anexos têm de ser de um dos vários tipos permitidos, e os nomes de ficheiros dos anexos têm de terminar numa extensão de nome de ficheiro reconhecida para o tipo. Para ver uma lista dos tipos e extensões de nomes de ficheiros permitidos, consulte o artigo Enviar correio com anexos.