Figura 1 - mail.jar |
Ahora necesita crear un nuevo proyecto en Eclipse y agregar dicha libreria (mail.jar) al proyecto, instrucciones detalladas en como realizar esta acción pueden encontrarse en una entrada anterior de este blog, basta con que remplaze itext.jar con mail.jar http://hashblogeando.wordpress.com/2013/07/14/itext-generacion-de-archivo-pdf-en-java/ el proyecto resultante lucira similar a la figura 2
Figura 2 - Proyecto con mail.jar |
Notara que en la figura el proyecto contiene dos archivos en el paquete mx.com.develHash.correo, los cuales son el código de nuestro programa y el archivo de propiedades, este ultimo es un archivo de texto plano con este contenido:
mail.smtp.host=smtp.gmail.com
mail.smtp.socketFactory.port=465
mail.smtp.starttls.enable=true
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.port=465
mail.smtp.auth=true
Copie estos datos en un archivo gmail.properties y coloque dicho archivo en el mismo directorio donde esta el código de nuestro programa como muestra la figura 3
Figura 3 - Ubicación de archivo .properties |
La ubicación del archivo es muy importante, ya que el archivo gmail.properties contiene los datos para conectarse con el servidor de gmail y enviar un correo usando SSL
Ahora si, cree una nueva clase Java con el nombre CorreoSender.Java y copie el siguiente código:
package mx.com.develHash.correo;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* Crea y envia un correo electronico
* @author david
*
*/
public class CorreoSender {
static public void main(String[] args) {
// Nombre de usuario y contraseña del correo respectivamente
final String usuario = "<Su correo en gMail>";
final String passwd = "<Su contraseña>";
Properties props = new Properties();
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
Session session;
// Obtenemos los datos para utilizar el servidor de correo
try {
props.load(CorreoSender.class.getClassLoader().getResourceAsStream(
"mx/com/develHash/correo/gmail.properties"));
} catch (IOException e) {
System.err.println("********** Error al acceder a gmail.properties");
e.printStackTrace();
}
// Iniciamos sesion para envio de correos
session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(usuario, passwd);
}
});
// Creamos el coreo
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(usuario));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("<Destinatario>"));
message.setSubject("Correo de prueba");
message.setText("Mensaje de prueba generado en la fecha "
+ dateFormat.format(cal.getTime() ) );
// Enviamos el correo
System.out.println("Enviando correo...");
Transport.send(message);
System.out.println("Correo enviado");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
Las lineas en rojo se detallaran a continuación:
final String usuario = "<Su correo en gMail>" y final String passwd = "<Su contraseña>": Estas dos cadenas de texto simplemente contienen el nombre de usuario y la contraseña de su correo, en este caso particular el usuario y contraseña de su cuenta en gmail, cabe mencionar que el usuario debe estar en la forma nombreUsuario@gmail.com o de lo contrario no funcionara.
props.load(CorreoSender.class.getClassLoader().getResourceAsStream( "mx/com/develHash/correo/gmail.properties")); Con esta linea cargamos el contenido del archivo gmail.properties, que ,como ya se menciono, contiene los parametros de conexión con el servidor de gmail, noatara que en la linea indicada se hace mencion tanto al nombre de la clase, CorreoSender, como a la ruta interna del paquete, mx/com/develHash/correo/gmail.properties, esto es vital para que nuestro programa funcione, por lo que si modifico alguno de esos datos el cambio debe de reflejarse aquí también.
session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(usuario, passwd); } Iniciamos una sesión con el servidor de correo y nos identificamos con este por medio del usuario y contraseña que declaramos anteriormente.
message.setFrom(new InternetAddress(usuario)); Indicamos quien es el remitente del correo
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(<Destinatario>)); Indicamos a quien deseamos enviar el correo.
message.setSubject("Correo de prueba"); Establecemos cual es el asunto del mensaje.
message.setText("Mensaje de prueba generado en la fecha " + dateFormat.format(cal.getTime() ) ); indicamos el texto del mensaje, en este caso en particular se agrega la fecha y hora de envio.
Transport.send(message); Enviamos el mensaje.
Una vez que ejecute el programa, si todo salio bien, obtendrá una salida en consola similar a la figura 4, debo mencionar que el envio no es instantáneo de que aparezca el mensaje "Enviando Correo..." a que se muestre "Correo Enviado" tomara un par de segundos.
Figura 4 - Salida del programa |
Puede comprobar que el correo se halla enviado adecuadamente con abrir la cuenta de destino que halla seleccionado, lo que debería mostrarle un mensaje similar a la figura 5
Figura 5 - Resultado |
Ya para concluir debo recordar que el ejemplo usa el correo con SSL, si bien esto es una medida de seguridad extra que no esta demas podría darse el caso que desee evitarla, si asi fuera le recomiendo revisar los ejemplos indicados en el area de referencias, los cuales además podrian darle ideas que tal vez se ajusten mas a lo que desea obtener. Aparte las posibilidades con javamail son bastante extensas y espero cubrir mas de estas en el futuro.
Por lo pronto espero que la entrada halla sido de ayuda y nos vemos pronto.
Referencias
http://www.chuidiang.com/java/herramientas/javamail/empezar-javamail.php
http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/