2016-11-21 1 views
-1

Java 응용 프로그램을 사용하여 전자 메일을 보내려고하지만 항상 연결 오류가 발생합니다. 그래서 내 코드는 다음과 같습니다 :Java 메일에 연결 오류가 있습니다.

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

public class SendMail { 

public static void main(String [] args) { 

    String to = "[email protected]"; 
    String from = "[email protected]"; 
    String host = "localhost"; 

    Properties properties = System.getProperties(); 
    properties.setProperty("mail.user", "fromsomeone"); 
    properties.setProperty("mail.password", "passwordForSomeone"); 
    properties.setProperty("mail.smtp.host", host); 

    Session session = Session.getDefaultInstance(properties); 


    try { 

     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
     message.setSubject("subject typed"); 
     message.setText("This is actual message which is just some lines"); 
     Transport.send(message); 

    }catch (MessagingException mex) { 
     mex.printStackTrace(); 
    } 
} 
} 

물론 나는 (내 gmail 계정을 사용하여) 유효한 정보를 제공합니다. 그리고 이것은 내가 돌아 오는 오류입니다.

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout -1; 
    nested exception is: 
java.net.ConnectException: Connection refused (Connection refused) 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2118) 
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:712) 
at javax.mail.Service.connect(Service.java:366) 
at javax.mail.Service.connect(Service.java:246) 
at javax.mail.Service.connect(Service.java:195) 
at javax.mail.Transport.send0(Transport.java:254) 
at javax.mail.Transport.send(Transport.java:124) 
at email.SendMail.main(SendMail.java:49) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.net.ConnectException: Connection refused (Connection refused) 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
at java.net.Socket.connect(Socket.java:589) 
at java.net.Socket.connect(Socket.java:538) 
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:331) 
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238) 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2084) 
... 12 more 

누군가 내 도움을 줄 수 있습니까? 내 코드에 어떤 문제가 있습니까? 고맙습니다!

+0

localhost에서 실행중인 SMTP 서버 또는 SMTP 서버가 localhost에서 연결을 수락하는지 확인하십시오. –

+0

나는 cmd를 라인에서이를 확인하기 위해 시도했다 : 'TELNET MAIL.THEIRDOMAIN.COM 25 는 141.8.225.226을 시도 ...' 하지만 난 응답 – dmbdnr

+0

'TELNET이 없어 : 141.8.225.226를 해결하기 위해 연결을 : 운영 시간 초과 됨 TELNET : 원격 호스트에 연결할 수 없습니다. ' – dmbdnr

답변

1

;

public class MailMan { 
Session session = null; 

public MailMan() { 
    if (session == null) { 
     init(); 
    } 
} 

public void init() { 

    Properties props = new Properties(); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "465"); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "465"); 

    session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication("EMAIL", "PASSWORD"); 
     } 
    }); 
    if (session != null) { 
     System.out.println("[OK]"); 
    } else { 
     System.out.println("[NOK]"); 
    } 
} 

public void sendMail() { 
    if (session == null) { 
     System.exit(0); 
    } 
    try { 
     String messageText = ""; 
     Message message = new MimeMessage(session); 
     try { 
      message.setFrom(new InternetAddress("no-reply", "No Reply")); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     message.setReplyTo(InternetAddress.parse("no-reply")); 


     message.addRecipients(Message.RecipientType.TO, InternetAddress.parse("to_email")); 
     message.setSubject("TEST"); 
     message.setText(messageText); 

     Transport.send(message); 

     System.out.println("[OK]"); 

    } catch (MessagingException e) { 
     e.printStackTrace(); 
     System.out.println("Not Sent..."); 
    } 
} 
} 

그리고 메인 클래스;

public class SendMail { 

public static void main(String[] args) { 
    MailMan ma = new MailMan(); 
    ma.sendMail(); 

    } 
} 

결국 보안 수준이 낮은 앱에 대한 액세스를 켜야합니다.

+0

정말 고마워요, 제대로 작동합니다 :)) – dmbdnr

0

당신은 변경 시도 할 수 있습니다 :

properties.setProperty("mail.smtp.host", host); 

에 : 이것은 당신이 Gmail 계정을 통해 메일을 보낼 도움이 될 것입니다

properties.setProperty("mail.smtp.host", "smtp.gmail.com"); 
+0

이렇게하면 다음과 같은 오류가 발생합니다 : com.sun.mail.smtp.SMTPSendFailedException : 530 5.7.0 먼저 STARTTLS 명령을 실행해야합니다. d8sm19145269wmi.21 - gsmtp' – dmbdnr