Google Code disponible en: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
El API Java del servicio de correo admite la interfaz JavaMail (javax.mail) para el envío de mensajes de correo electrónico.
Para obtener más información, consulta referencia del API de JavaMail de Sun.
Para enviar un mensaje de correo electrónico, una aplicación prepara un objeto MimeMessage y, a continuación, lo envía con el método estático send() de la clase Transport. El mensaje se crea a través de un objeto JavaMail Session. El objeto Session y el objeto Transport funcionan en el servicio de correo de App Engine sin necesidad de ninguna configuración 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) {
// ...
}
Las llamadas al servicio de correo son asíncronas y devuelven de inmediato. El servicio de correo gestiona el proceso de establecer contacto con los servidores de correo de los destinatarios y de entregar el mensaje. Si hay algún problema al enviar el mensaje a algún destinatario o si el servidor de correo del destinatario devuelve un mensaje "devuelto", el mensaje de error se dirige al remitente.
Las direcciones de correo electrónico del remitente y del destinatario se representan en JavaMail a través de instancias de la clase InternetAddress. El constructor toma la dirección de correo electrónico como una cadena y genera una excepción AddressException si la dirección no se parece a una dirección de correo electrónico válida.
Para establecer la dirección del remitente, la aplicación ejecuta el método setFrom() del objeto MimeMessage. El remitente debe ser la dirección de un desarrollador registrado de la aplicación o la dirección del usuario de la solicitud actual que ha accedido con una cuenta de Google.
Varios métodos del objeto MimeMessage establecen los destinatarios. El método addRecipient() toma un tipo de destinatario y una dirección, que añade a la lista de destinatarios de ese tipo. El tipo de destinatario puede ser Message.RecipientType.TO, Message.RecipientType.CC o Message.RecipientType.BCC.
Puedes establecer una dirección "responder a" a través del método setReplyTo().
Puedes establecer el contenido del mensaje si ejecutas métodos del objeto MimeMessage. El método setSubject() establece el asunto y el método setText() establece el contenido del cuerpo (texto sin formato).
Por razones de seguridad, el servicio de correo no permite encabezados arbitrarios en mensajes de correo electrónico salientes. El servicio de correo puede anular algunos encabezados como, por ejemplo, la fecha de envío del mensaje. Otros encabezados añadidos al mensaje saliente se eliminan.
Puedes enviar un mensaje con archivos adjuntos o con un cuerpo de mensaje en HTML, además de un cuerpo de mensaje con texto sin formato, mediante mensajes en varias partes. Puedes crear un objeto MimeMultipart que contenga las partes y, a continuación, crear un objeto MimeBodyPart para cada archivo adjunto o cuerpo de mensaje alternativo y añadirlo al contenedor. Por último, puedes asignar el contenedor al contenido de 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 razones de seguridad, las partes del mensaje y los archivos adjuntos deben ser de alguno de los tipos permitidos y los nombres de los archivos adjuntos deben terminar en una extensión de nombre de archivo que sea reconocida por ese tipo. Para obtener una lista de extensiones de nombre de archivo y tipos permitidos, consulta Aspectos generales: archivos adjuntos.
Una aplicación no puede recibir mensajes de correo electrónico.
Una aplicación no puede utilizar la interfaz JavaMail para establecer conecto con otros servicios de correo y enviar o recibir mensajes de correo electrónico. Se ignora la configuración de SMTP añadida al objeto Transport o al objeto Session.
Todas las funciones del API del servicio de correo de nivel inferior están disponibles en la interfaz JavaMail.
El API de nivel inferior incluye un método de conveniencia para enviar correo a todos los administradores de la aplicación. Para poder hacer esto en JavaMail, utiliza admin@. ("admin", arroba y punto) como destinatario.