Para enviar correos desde una Aplicación Java, es necesario utilizar una librería adicional. El API JavaMail, desarrollado por Oracle, proporciona las funcionalidades de construcción y envío de correos.
– En primer lugar, debemos descargar JavaMail aquí.
– Luego descomprimir y extraer el archivo mail.jar
– En nuestro IDE (Netbeans, Eclipse,..), agregar el JAR al Proyecto Java.
– Crear la clase MailSender que inicialice los parámetros del mensaje y provea de un método que envíe el mensaje. En el siguiente ejemplo se ha configurado una cuenta de Gmail para el envío de mensajes :
import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class MailSender { private final Properties properties = new Properties(); private Session session; private void init() { properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.port", 587); properties.put("mail.smtp.mail.sender", "micuenta@gmail.com"); properties.put("mail.smtp.password", "miclave"); properties.put("mail.smtp.user", "micuenta@gmail.com"); properties.put("mail.smtp.auth", "true"); session = Session.getDefaultInstance(properties); }
public void send(String destino, String asunto, String mensaje) { init(); try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress((String) properties.get("mail.smtp.mail.sender"))); message.addRecipient(Message.RecipientType.TO, new InternetAddress(destino)); message.setSubject(asunto); message.setContent(mensaje,"text/html"); Transport t = session.getTransport("smtp"); t.connect((String) properties.get("mail.smtp.user"), (String) properties.get("mail.smtp.password")); t.sendMessage(message, message.getAllRecipients()); t.close(); } catch (MessagingException e) { return; } } public void send(String destino, String asunto, String mensaje, String nombre_archivo, String ruta_archivo) { init(); try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress((String) properties.get("mail.smtp.mail.sender"))); message.addRecipient(Message.RecipientType.TO, new InternetAddress(destino)); message.setSubject(asunto); BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText(mensaje); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); messageBodyPart = new MimeBodyPart(); String filename = ruta_archivo; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(nombre_archivo); multipart.addBodyPart(messageBodyPart); message.setContent(multipart); Transport t = session.getTransport("smtp"); t.connect((String) properties.get("mail.smtp.user"), (String) properties.get("mail.smtp.password")); t.sendMessage(message, message.getAllRecipients()); t.close(); } catch (MessagingException e) { return; } } }
– Finalmente para enviar el correo, se llama al método send de la clase MailSender de la siguiente forma:
MailSender mail = new MailSender(); mail.send("destino@mail.com","Esto es una prueba","Este correo fue enviado usando JavaMail"); mail.send("destino@mail.com","Esto es una prueba","Este correo fue enviado usando JavaMail","adjunto.pdf","C:\\ruta\\archivo.pdf");
JavaMail: Enviar correos desde una Aplicación Java
Hola muy bueno,Funciona prefectamente pero faltan comentarios para poder entender muy bien este codigo,Pero de todos modos Muy bueno
Gracias…..
Excelente!! Facilísimo de usar! Lo implementé y funciona perfectamente…
Sólo encontré una limitación:
Hice pruebas con envío masivo (a varios e-mails), y no funciona poniendo correos separados por comas.
Pero en otro lado encontré que puedes repetir la sentencia:
message.addRecipient(Message.RecipientType.TO, … );
Una dificultad que tuve, fue que en la cuenta de correo fuente (desde donde envío emails) necesitas desactivar un criterio de protección; sino, no va a permitir la salida de correos. No sé si otros gestores de correo actualmente presenten esa rigurosidad en seguridad; para tener en cuenta en caso no se envíe ningún correo.
PD: Los archiva en la carpeta “enviados” del emisor.
Hola!
Para envío a varias direcciones puedes usar la siguiente línea:
message.addRecipients(Message.RecipientType.TO,InternetAddress.parse("user1@hotmail.com,user2@gmail.com,user3@yahoo.com"));
Para agregar los correos en copia (CC) utilizar Message.RecipientType.CC
Sobre el criterio de protección que mencionas, la cuenta no debe tener autenticación en dos pasos vía generador de código u otro medio. Sólo he probado con GMAIL así que no te podría afirmar si otros servicios de correo tienen otras restricciones.
Saludos y gracias por tu comentario!
Hola queria hacer una consulta para testearlo es necesario deployarlo en , yo estoy trabajando con GAE de google o puedo probarlo de manera local y deberia funcionar , GRACIAS
muy buen aporte gracias…