Enviar correos con la API de correo

La API de servicio de correo para Java admite la interfaz JavaMail (javax.mail) a fin de enviar mensajes de correo electrónico.

Antes de comenzar

Registra los correos electrónicos de tus remitentes como remitentes autorizados. Para obtener más información, consulta quién puede enviar correos electrónicos.

Envía correos electrónicos

Para poder enviar mensajes de correo electrónico, usa las clases de JavaMail incluidas en el SDK de App Engine.

Si no provees una configuración del servidor SMTP cuando creas una sesión de JavaMail, App Engine usa el servicio de correo para enviar mensajes. Como alternativa, puedes agregar la configuración SMTP para los proveedores de correo de terceros compatibles, como Mailgun, Mailjet o SendGrid.

Si quieres enviar un mensaje sigue estos pasos:

  1. Crea un mensaje con un objeto Session de JavaMail.

  2. Crea un objeto MimeMessage.

  3. Para configurar el remitente y el destinatario, usa la clase InternetAddress.

    1. Identifica al remitente con una llamada al método setFrom() en el objeto MimeMessage. Otra opción es proveer un nombre personal como una string en el segundo parámetro.

    2. Puedes identificar al remitente si pasas un tipo de destinatario y una dirección al método addRecipient(). El tipo de destinatario puede ser Message.RecipientType.TO, Message.RecipientType.CC o Message.RecipientType.BCC.

    El constructor InternetAddress genera una AddressException si parece que la dirección de correo electrónico no es válida.

  4. Si quieres configurar una dirección "responder a", usa el método setReplyTo().

  5. Establece los contenidos del mensaje con una llamada a los métodos en el objeto MimeMessage. Configura el asunto con setSubject() y establece el contenido del cuerpo con texto sin formato con setText().

  6. Para enviar el mensaje, usa el método estático send() en la clase Transport.

El servicio de correo te permite especificar un conjunto de encabezados limitado en mensajes de correos electrónicos salientes. Para obtener más información, consulta Encabezados opcionales que puedes usar.

En el siguiente código de muestra, se enseña cómo enviar un correo:

Java 8

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) {
  // ...
}

Java 7

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) {
  // ...
}

Las llamadas al servicio de correo son asíncronas y se muestran de forma inmediata. El servicio de correo administra el proceso de contactar a los servidores de correos del destinatario y de entregar el mensaje. Si surge algún problema al momento de enviar el mensaje a cualquier destinatario, o si el servidor de correo del destinatario muestra un mensaje "rebote", el remitente recibe el mensaje de error.

Envía mensajes de varias partes

Puedes enviar mensajes de varias partes, como un mensaje con archivos adjuntos o un mensaje con el cuerpo del mensaje con texto sin formato y un cuerpo del mensaje HTML.

Sigue estos pasos para enviar un mensaje de varias partes:

  1. Crea un objeto MimeMultipart para contener las partes, luego crea un objeto MimeBodyPart por cada adjunto o cuerpo del mensaje alternativo y agrégalo al contenedor.

  2. Asigna el contenedor al contenido para MimeMessage.

En el código de muestra a continuación se enseña cómo enviar un mensaje de varias partes:

Java 8

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);

Java 7

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 razones de seguridad, las partes de los mensajes y sus adjuntos deben ser uno de los varios tipos permitidos y los nombres de los archivos adjuntos deben finalizar en una extensión de nombre de archivo reconocida para ese tipo. Si quieres obtener una lista de los tipos y extensiones de nombres de archivos permitidos, consulta Correo con archivos adjuntos.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java 8