Visi贸n general
Contenido
La mayor铆a de los sitios web ofrecen hoy una suscripci贸n a un bolet铆n informativo de cualquier tipo para informarnos sobre sus grandes ofertas, descuentos, nuevos productos, servicios y recibos.
Al registrarse en un sitio web, tambi茅n (en la mayor铆a de los casos) recibimos un correo electr贸nico para verificar nuestra direcci贸n de correo electr贸nico y vincularla a la cuenta en la que se est谩 registrando.
Esta puede ser una gran t谩ctica de marketing y realmente puede hacer crecer su negocio y su plataforma, por lo que es imprescindible saber c贸mo crear un sistema simple para enviar correos electr贸nicos, especialmente si est谩 lanzando una plataforma que ofrece un producto o servicio de cualquier tipo.
Para lograr esto, usaremos una de las bibliotecas centrales de Java: javax.mail
.
Env铆o de un correo electr贸nico de texto sin formato
Aunque nuestro correo electr贸nico de ejemplo a continuaci贸n no es tan emocionante como los correos electr贸nicos bien dise帽ados con botones e im谩genes personalizados, un correo electr贸nico simple como este a menudo se env铆a para registrarse o restablecer la contrase帽a significa:
public class EmailSender {
public static void main(String[] args) {
String recipient = "[email聽protected]";
String sender = "[email聽protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(sender));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
message.addRecipients(Message.RecipientType.TO, new Address[...]); // email to multiple recipients
message.setSubject("Hello World!");
message.setText("And hello from the body of the message!");
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
Nos presentan un par de clases aqu铆:
Properties
– Representa cualquier conjunto de propiedades y valores predeterminados.Session
– Recopila las propiedades y los valores predeterminados que utiliza la API del correo.MimeMessage
– Representa el M脥MICA mensaje de correo electr贸nico de estilo.InternetAddress
– Representa un RFC882 direcci贸n de Internet de sintaxis – “[email聽protected]”
Env铆o de correo electr贸nico con HTML
Los correos electr贸nicos HTML son muy comunes y probablemente los vea todos los d铆as en su bandeja de entrada. Todos los nuevos cat谩logos de lujo y productos llamativos est谩n decorados para atraer tanto como sea posible, al igual que sus contrapartes de sitios web.
Enviar un correo electr贸nico con HTML es un poco diferente del ejemplo anterior en una sola l铆nea:
public class EmailSender {
public static void main(String[] args) {
String recipient = "[email聽protected]";
String sender = "[email聽protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(sender));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
message.setSubject("Hello World!");
message.setContent("<h1>Message Header</h1>" +
"<p>This is a paragraph </p>" +
"<p>This is another paragraph</p>", "text/html");
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
Usando el .setContent()
m茅todo, y estableciendo el tipo para ser text/html
, podemos agregar HTML a nuestro mensaje de correo electr贸nico.
El m茅todo acepta una MultiPart
objeto o un Objeto / Cadena, y simplemente establece los argumentos como el contenido del mensaje.
Env铆o de correo electr贸nico con un archivo adjunto
En muchos casos, es posible que desee enviar un correo electr贸nico con un archivo adjunto de cualquier tipo. Por ejemplo, despu茅s de que un cliente solicita su producto o paga por su servicio, usted querr谩 enviar un recibo para confirmar la compra.
Si su producto o servicio requiere documentos legales, un cliente tambi茅n puede recibir un documento legal para firmar y enviar de vuelta, todo lo cual se puede hacer por correo electr贸nico.
En cualquiera de estos casos, esto requiere un enfoque un poco diferente al de nuestros ejemplos anteriores:
public class EmailSender {
public static void main(String[] args) {
String recipient = "[email聽protected]";
String sender = "[email聽protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(sender));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
message.setSubject("Receipt for your product!");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Thank you for buying with us, here's a receipt for your product.");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("receipt.txt");
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
Aqu铆, nos presentan algunas clases nuevas:
BodyPart
– Una clase abstracta que representa una parte de unMultipart
Multipart
– Un contenedor para m煤ltiplesBodyPart
objetosDataSource
– Proporciona un tipo para una recopilaci贸n arbitraria de datos, as铆 como el acceso a ellos en forma deInputStreams
yOutputStreams
Al agregar un Multipart
como contenido, podemos agregar tantos BodyParts
en ella, y despu茅s de agregar una, podemos usar la misma variable de referencia para inicializar una nueva y almacenarla en el Multipart
tambi茅n.
Conclusi贸n
Estas son las tres cosas m谩s comunes que necesita saber para enviar correos electr贸nicos de cualquier tipo en Java simple, sin bibliotecas de terceros adicionales.