Primero descargue la API JavaMail y asegúrese de que los archivos jar relevantes estén en su classpath.
Aquí hay un ejemplo de trabajo completo usando GMail.
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Main {
private static String USER_NAME = "*****"; // GMail user name (just the part before "@gmail.com")
private static String PASSWORD = "********"; // GMail password
private static String RECIPIENT = "[email protected]";
public static void main(String[] args) {
String from = USER_NAME;
String pass = PASSWORD;
String[] to = { RECIPIENT }; // list of recipient email addresses
String subject = "Java send mail example";
String body = "Welcome to JavaMail!";
sendFromGMail(from, pass, to, subject, body);
}
private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
// To get the array of addresses
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch (AddressException ae) {
ae.printStackTrace();
}
catch (MessagingException me) {
me.printStackTrace();
}
}
}
Naturalmente, querrá hacer más en los catch
bloques que imprimir el seguimiento de la pila como lo hice en el código de ejemplo anterior. (Elimine los catch
bloques para ver qué método llama desde las excepciones de lanzamiento de la API JavaMail para que pueda ver mejor cómo manejarlos correctamente).
Gracias a @jodonnel y a todos los que respondieron. Le estoy dando una recompensa porque su respuesta me llevó aproximadamente el 95% del camino a una respuesta completa.
smtp.gmail.com
. Consulte Configuración de otros clientes de correo para obtener más detalles.javax.mail.AuthenticationFailedException
y tuve que habilitar explícitamente "aplicaciones menos seguras" en mi configuración de gmail: google.com/settings/security/lesssecureapps . Una vez que se habilitó "aplicaciones menos seguras", el código funcionóAlgo como esto (parece que solo necesita cambiar su servidor SMTP):
fuente
message.setText("Welcome to JavaMail");
con esta línea:message.setContent("<h1>Hello world</h1>", "text/html");
props.put("mail.smtp.starttls.enable", "true")
Otras personas tienen buenas respuestas arriba, pero quería agregar una nota sobre mi experiencia aquí. Descubrí que cuando uso Gmail como un servidor SMTP saliente para mi aplicación web, Gmail solo me permite enviar unos 10 mensajes más o menos antes de responder con una respuesta antispam que debo revisar manualmente para volver a habilitar el acceso SMTP. Los correos electrónicos que estaba enviando no eran spam, sino correos electrónicos de "bienvenida" del sitio web cuando los usuarios se registraban en mi sistema. Entonces, YMMV, y no confiaría en Gmail para una aplicación web de producción. Si envía un correo electrónico en nombre de un usuario, como una aplicación de escritorio instalada (donde el usuario ingresa sus propias credenciales de Gmail), puede estar bien.
Además, si está utilizando Spring, aquí hay una configuración que funciona para usar Gmail para SMTP saliente:
fuente
A pesar de que esta pregunta está cerrada, me gustaría publicar una solución de contador, pero ahora usando Simple Java Mail (Open Source JavaMail smtp wrapper):
fuente
new Mailer(your login / your session, TransportStrategy.SMTP_TLS).sendMail(email);
Mi código completo como se muestra a continuación funciona bien:
fuente
fuente
El mínimo requerido:
fuente
Las soluciones de código publicado pueden causar problemas cuando necesita configurar varias sesiones SMTP en cualquier lugar dentro de la misma JVM.
Las preguntas frecuentes de JavaMail recomiendan usar
en vez de
porque getDefault solo usará las propiedades dadas la primera vez que se invoca. Todos los usos posteriores de la instancia predeterminada ignorarán los cambios de propiedad.
Ver http://www.oracle.com/technetwork/java/faq-135477.html#getdefaultinstance
fuente
Esto es lo que hago cuando quiero enviar un correo electrónico con archivo adjunto, funciona bien. :)
fuente
Una ruta fácil sería tener la cuenta de gmail configurada / habilitada para el acceso POP3. Esto le permitiría enviar a través de SMTP normal a través de los servidores de Gmail.
Entonces simplemente enviaría a través de smtp.gmail.com (en el puerto 587)
fuente
Hola prueba este código ...
fuente
Aquí hay una clase fácil de usar para enviar correos electrónicos
Gmail
. Necesita tener laJavaMail
biblioteca agregada a su ruta de compilación o simplemente usarlaMaven
.Ejemplo de uso:
fuente
Si quieres usar Outlook con,
Javamail API
entonces usacomo host para obtener más y más código de trabajo. Mira esta respuesta .
fuente
Valor añadido:
Session.getInstance()
recomendado sobreSession.getDefaultInstance()
fuente