He encontrado varias otras preguntas ASÍ que en cuanto a la JavaMail API y el envío de correo a través de un servidor SMTP, pero ninguno de ellos discuten el uso de TLS de seguridad. Estoy tratando de utilizar JavaMail para enviar actualizaciones de estado a mí a través de mi trabajo servidor de correo SMTP, pero requiere TLS, y no puedo encontrar ejemplos en línea de cómo utilizar JavaMail para tener acceso a un servidor SMTP que requiere el cifrado TLS. Alguien puede ayudar con esto?

InformationsquelleAutor dancavallaro | 2009-01-04

5 Comentarios

  1. 61

    Tenemos código de notificación en nuestro producto que utiliza TLS para enviar correo electrónico, si está disponible.

    Que usted tendrá que configurar el Java propiedades de Correo. Sólo se necesita el TLS uno, pero usted puede ser que necesite SSL si el servidor SMTP utiliza el protocolo SSL.

    Properties props = new Properties();
    props.put("mail.smtp.starttls.enable","true");
    props.put("mail.smtp.auth", "true");  //If you need to authenticate
    //Use the following if you need SSL
    props.put("mail.smtp.socketFactory.port", d_port);
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");

    Puede pasar esto a una Sesión JavaMail o de cualquier otra sesión de instantiator como Session.getDefaultInstance(props).

    • Muchas gracias! Literalmente, todo lo que hice fue agregar la línea de accesorios.put(«mail.smtp.starttls.activar»,»true»); a mi código y funcionó a la perfección!
    • Tenga en cuenta que la configuración de enchufe de fábrica no es necesario con modernas java.correo electrónico: stackoverflow.com/questions/17581066/…
  2. 24

    Buen post, la línea de

    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

    es obligatorio si el servidor SMTP utiliza la Autenticación SSL, como el SMTP de GMail servidor. Sin embargo, si el servidor utiliza Autenticación en Texto no cifrado a través de TLS, no debe ser así, ya que Java Correo se quejan de la conexión inicial, está claro.

    También asegúrese de que está utilizando la versión más reciente de Java Mail. Recientemente he utilizado algunos de los antiguos Java Mail frascos de un proyecto anterior y no podía hacer que el código de trabajo, debido a que el proceso de inicio de sesión estaba fallando. Después de que he actualizado a la última versión de Java de Correo, la razón de que el error quedó claro: era un javax.net.ssl.SSLHandshakeException, que no fue lanzado en la versión antigua de la lib.

  3. 8

    La configuración del ejemplo anterior no funciona para el servidor que estaba usando (authsmtp.com). Seguí recibiendo este error:

    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

    He quitado el correo.smtp.socketFactory configuración y todo funcionó. La configuración final se esta (SMTP auth no fue utilizado y me puse el puerto en otra parte):

    java.util.Properties props = new java.util.Properties();
    props.put("mail.smtp.starttls.enable", "true");
  4. 6

    Sólo utilice el siguiente código. Es muy útil para enviar correo a través de Java, y funciona:

    import java.util.*;
    import javax.activation.CommandMap;
    import javax.activation.MailcapCommandMap;
    import javax.mail.*;
    import javax.mail.Provider;
    import javax.mail.internet.*;
    public class Main {
    public static void main(String[] args) {
    final String username="[email protected]";
    final String password="password";
    Properties prop=new Properties();
    prop.put("mail.smtp.auth", "true");
    prop.put("mail.smtp.host", "smtp.gmail.com");
    prop.put("mail.smtp.port", "587");
    prop.put("mail.smtp.starttls.enable", "true");
    Session session = Session.getDefaultInstance(prop,
    new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(username, password);
    }
    });
    try {
    String body="Dear Renish Khunt Welcome";
    String htmlBody = "<strong>This is an HTML Message</strong>";
    String textBody = "This is a Text Message.";
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("[email protected]"));
    message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]"));
    message.setSubject("Testing Subject");
    MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
    CommandMap.setDefaultCommandMap(mc);
    message.setText(htmlBody);
    message.setContent(textBody, "text/html");
    Transport.send(message);
    System.out.println("Done");
    } catch (MessagingException e) {
    e.printStackTrace();
    }
    }
    }
  5. 2

    Con Java Simple Correo 5.0.0 (simplejavamail.org es muy sencillo y la biblioteca se hará cargo de todas las propiedades de la Sesión para usted.

    He aquí un ejemplo de uso de Google de los servidores SMTP:

    Email email = EmailBuilder.startingBlank()
    .from("lollypop", "[email protected]")
    .to("C.Cane", "[email protected]")
    .withSubject("hey")
    .withPlainText("We should meet up!")
    .withHTMLText("<b>We should meet up!</b>")
    .buildEmail();
    MailerBuilder.withSMTPServer("smtp.gmail.com", 25, "user", "pass", SMTP_TLS)
    .buildMailer()
    .sendMail(email);
    MailerBuilder.withSMTPServer("smtp.gmail.com", 587, "user", "pass", SMTP_TLS)
    .buildMailer()
    .sendMail(email);
    MailerBuilder.withSMTPServer("smtp.gmail.com", 465, "user", "pass", SMTP_SSL)
    .buildMailer()
    .sendMail(email);

    Si usted tiene dos factores de inicio de sesión activada, es necesario generar un contraseña específica de la aplicación de tu cuenta de Google.

Dejar respuesta

Please enter your comment!
Please enter your name here