2017-11-27 14 views
2

내 수업 중 하나에 대한 최종 프로젝트를 진행하고 있으며이 프로그램은 전자 메일 주소로 코드를 전송하기위한 것입니다. 나는 대부분의 코드가 어떻게 동작 하는지를 알고 암호 인증을 이해하는 데 문제가 있으며 SMTP 서버에 연결하고 특정 포트를 사용하는 방법을 알고있다. 이 코드의 문제점은 실행될 때 전자 메일을 보내지 않고 오류 메시지를 표시하지 않는다는 것입니다. 어떤 도움이라도 대단히 감사 할 것입니다. 여기에 코드가 있습니다.Java 전자 메일 프로그램이 전자 메일을 보내지 않음

package application; 

import java.util.Properties; 

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


public class SendEmail { 
public static void main (String [] args) { 

    String host="smtp.gmail.com"; 
    final String user="[email protected]"; 
    final String password="password"; 

    String to="targetemail.com"; 

    //imported code 
    Properties props = new Properties(); 
    props.put("mail.smtp.socketfactory.port", "465"); 
    props.put("mail.smtp.port", "465"); 
    props.put("mail.smtp.host",host); 
    props.put("mail.smtp.auth", "true"); 

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

//imported code 
     try { 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(user)); 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
     message.setSubject("Dwight from the future"); 
     message.setText("At 8:00, someone poisons the coffee. Do NOT drink 
    it."); 


     Transport.send(message); 

     System.out.println("message sent!"); 

     } 
     catch (MessagingException mex) 
     { 
      System.out.println("Error: unable to send message...."); 
      mex.printStackTrace(); 
     } 
    } 
    } 
+0

은 HTTPS를 확인하십시오 : 보안이 여기에 SSL 프로토콜 –

+0

를 사용하여 거의 모든 SMTP 서버가 http://javabycode.com/spring-framework-tutorial/spring-boot-tutorial/spring 전체 작업 예입니다 .. 때문에 -boot-freemarker-email-template.html –

+0

@VedPrakash 그는 포트 465, 즉 smtps를 사용하고 있습니다. – Robert

답변

1

나는 포트 값이 있어야한다고 생각 같은

props.put("mail.smtp.port", "587"); 

예를 구성

아래

props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.port", "587"); 
props.put("mail.smtp.starttls.enable", "true"); 
props.put("mail.smtp.ssl.trust", "*"); 
+0

고마워요! 당신은 무엇을 생각 했나요? props.put ("mail.smtp.starttls.enable", "true"); props.put ("mail.smtp.ssl.trust", "*"); 코드가 무엇입니까? @praveen – Rinzler

+0

https://stackoverflow.com/questions/18333594/is-starttls-enabled-true-is-safe-for-mail-sending-from-java-code이 링크는 질문에 대답해야합니다. – praveen

+0

감사합니다. ! 이제는 작동하는 API에서 시작해야합니다 ... – Rinzler

0

(포트 값을 수정) 아래의 코드를 시도하십시오.

import java.util.Properties; 

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


public class Main { 

    public static void main(String[] args) { 

     String host="smtp.gmail.com"; 
     final String user="[email protected]"; 
     final String password="*********"; 

     String to="[email protected]"; 

     //imported code 
     Properties props = new Properties(); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.user", user); 
     props.put("mail.smtp.password", password); 
     props.put("mail.smtp.port", "587"); 
     props.put("mail.smtp.auth", "true"); 


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

     //imported code 
     try { 
      MimeMessage message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(user)); 
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
      message.setSubject("Dwight from the future"); 
      message.setText("At 8:00, someone poisons the coffee. Do NOT drinkit."); 


        Transport.send(message); 

      System.out.println("message sent!"); 

     } 
     catch (MessagingException mex) 
     { 
      System.out.println("Error: unable to send message...."); 
      mex.printStackTrace(); 
     } 

    } 
}