2014-12-23 11 views
5

Sto provando a inviare un'e-mail tramite codice Java utilizzando gmail come SMTP. Ma ottenendo un'eccezione come di seguito. Puoi farmi sapere perché non è in grado di trovare l'host di Gmail. Sto lavorando in una rete aziendale, non sono sicuro che un firewall stia impedendo l'invio. Se sì, quale è la via d'uscita?Errore nell'invio di e-mail tramite SMTP

Exception in thread "main" com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.gmail.com, 586; timeout -1; 
    nested exception is: 
    java.net.UnknownHostException: smtp.gmail.com 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2053) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697) 
    at javax.mail.Service.connect(Service.java:364) 
    at javax.mail.Service.connect(Service.java:245) 
    at mail.JavaEmail.sendEmail(JavaEmail.java:72) 
    at mail.JavaEmail.main(JavaEmail.java:22) 
Caused by: java.net.UnknownHostException: smtp.gmail.com 

codice sorgente Java:

package mail; 

import java.util.Properties; 

import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class JavaEmail 
{ 
    Session mailSession; 

    public static void main(String args[]) throws AddressException, MessagingException 
    { 
     JavaEmail javaEmail = new JavaEmail(); 
     javaEmail.setMailServerProperties(); 
     javaEmail.draftEmailMessage(); 
     javaEmail.sendEmail(); 
    } 

    private void setMailServerProperties() 
    { 
     Properties emailProperties = System.getProperties(); 
     emailProperties.put("mail.smtp.port", "586"); 
     emailProperties.put("mail.smtp.auth", "true"); 
     emailProperties.put("mail.smtp.starttls.enable", "true"); 
     mailSession = Session.getDefaultInstance(emailProperties, null); 
    } 

    private MimeMessage draftEmailMessage() throws AddressException, MessagingException 
    { 
     String[] toEmails = { "[email protected]" }; 
     String emailSubject = "Test email subject"; 
     String emailBody = "This is an email sent by JAVA Code"; 
     MimeMessage emailMessage = new MimeMessage(mailSession); 
     /** 
     * Set the mail recipients 
     * */ 
     for (int i = 0; i < toEmails.length; i++) 
     { 
      emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i])); 
     } 
     emailMessage.setSubject(emailSubject); 
     /** 
     * If sending HTML mail 
     * */ 
     emailMessage.setContent(emailBody, "text/html"); 
     /** 
     * If sending only text mail 
     * */ 
     //emailMessage.setText(emailBody);// for a text email 
     return emailMessage; 
    } 

    private void sendEmail() throws AddressException, MessagingException 
    { 
     /** 
     * Sender's credentials 
     * */ 
    String fromUser = "[email protected]"; 
     String fromUserEmailPassword = "*****"; 

     String emailHost = "smtp.gmail.com"; 
     Transport transport = mailSession.getTransport("smtp"); 
     transport.connect(emailHost, fromUser, fromUserEmailPassword); 
     /** 
     * Draft the message 
     * */ 
     MimeMessage emailMessage = draftEmailMessage(); 
     /** 
     * Send the mail 
     * */ 
     transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); 
     transport.close(); 
     System.out.println("Email sent successfully."); 
    } 
} 
+0

cercano porta 465 invece di 586 –

+0

messaggio di errore stesso anche con la porta 465 – user3868730

+0

può aiutare a http://stackoverflow.com/questions/411331/using-javamail-with-tls –

risposta

1

Questo può aiutare

Properties props = new Properties(); 
     props.setProperty("mail.transport.protocol", "smtp"); 
     props.setProperty("mail.host", mailhost); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.port", "465"); 
     props.put("mail.smtp.socketFactory.port", "465"); 
     props.put("mail.smtp.socketFactory.class", 
       "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.socketFactory.fallback", "false"); 
     props.setProperty("mail.smtp.quitwait", "false"); 

     session = Session.getDefaultInstance(props, this); 
0

Il seguente codice può aiutare a risolvere il problema, il suo funzionamento ........

import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 

public class Email { 

private static String USER_NAME = "username"; // GMail user name (just the part before "@gmail.com") 
private static String PASSWORD = "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 = "hi ....,!"; 

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.ssl.trust", 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(); 
    } 
} 
} 
+0

com.sun.mail.util.MailConnectException: Impossibile connettersi all'host, porta: smtp.gmail.com, 587; timeout -1; L'eccezione nidificata è la seguente: \t java.net.UnknownHostException: smtp.gmail.com – user3868730

+0

Il firewall del mio ufficio sta causando il problema? – user3868730

+0

Per favore fai riferimento a http://stackoverflow.com/questions/1990454/using-javamail-to-connect-to-gmail-smtp-server-ignores-specified-port-and-tries – Anptk

0

Ho avuto lo stesso problema. Modificato l'host smtp.gmail.com in ip 74.125.133.109 e ora funziona bene.

Problemi correlati