2012-12-12 10 views
6

Sto tentando di inviare un'e-mail dal mio programma tramite una connessione TLS. Qui è il mio codiceJava Mail su TLS

final String username = "XXXXXX"; 
    final String password = "XXXXX"; 
    Properties props = new Properties(); 
    props.put("mail.transport.protocol", "smtp"); 
    props.put("mail.smtp.starttls.enable","true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.host", "mail.xxxx.com"); 
    props.put("mail.smtp.port", "587"); 

    Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
       } 
      }); 

    Message message = new MimeMessage(session); 
    message.setFrom(new InternetAddress("[email protected]")); 
    message.setRecipients(Message.RecipientType.TO, 
     InternetAddress.parse(to_address)); 
    message.setSubject("Test Mail"); 
    message.setText("TestMail "); 
    Transport.send(message) 

mio gateway di posta ha le impostazioni della posta in arrivo con SSL abilitato e in uscita con TLS abilitato sulla porta 587. Sono in grado di configurare questa impostazione in Outlook e che sta funzionando benissimo. Ma attraverso il mio programma Java sta dicendo "Connection Refused". Guida apprezzata!

Ha lavorato Infine:

ho usato il programma InstallCert per importare il certicate per generare file di jssecacerts e ho aggiunto il file alla mia/jre/lib/security/percorso. Qui è il mio codice di lavoro

properties.put("mail.transport.protocol", "smtp"); 
    properties.put("mail.smtp.host", "XXXXXX"); 
    properties.put("mail.smtp.port", "465"); 
    properties.put("mail.smtp.ssl.enable", true); 
    properties.put("mail.smtp.socketFactory.port", "465"); 
    properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
    properties.put("mail.smtp.socketFactory.fallback", "false"); 
    properties.put("mail.smtp.quitwait", "false"); 
    properties.put("mail.smtp.auth", "true"); 
+0

In questo caso devi solo importare un certificato da un server specifico? Ho lo stesso problema, ma la mia applicazione deve inviare posta da qualsiasi account configurato dall'utente, il codice funziona con Outlook, Google e Yahoo, ma per un account con smtp zimbra.xxxxxxx.net.br non funziona a causa di questo certificato . –

risposta

4

È necessario utilizzare il protocollo smtps invece di smtp

props.put("mail.transport.protocol", "smtps"); 
props.put("mail.smtps.starttls.enable","true"); 
props.put("mail.smtps.auth", "true"); 
props.put("mail.smtps.host", "mail.xxxx.com"); 
props.put("mail.smtps.port", "587"); 

È anche provare a impostare il protocollo nello specifico per RFC822, questo aiuta a volte

props.put("mail.transport.protocol.rfc822", "smtps"); 
+0

Ho provato questo stesso problema ... questa volta sta provando a connettere "localhost", la porta 25. Questo è il mio registro di debug .... DEBUG SMTP: provare a connettersi all'host "localhost", porta 25, isSSL false – Surez

+0

Quale versione di javamail stai usando? –

+0

Java Mail 1.4.5 – Surez