1. 의존성 추가
<dependency>
    	<groupId>javax.mail</groupId>
    	<artifactId>javax.mail-api</artifactId>
   	<version>1.6.2</version>
</dependency>
<dependency>
	<groupId>com.sun.mail</groupId>
	<artifactId>javax.mail</artifactId>
	<version>1.6.2</version>
</dependency>

 

2. 샘플코드 

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 EmailSender {

    // 구글 이메일
    static final String user_email= "XXXXX@gmail.com";
    // 구글 비번
    static final String user_pw = "XXXXX";
    
    static final String smtp_host = "smtp.gmail.com";
    static final int smtp_port = 465;  // TLS : 587, SSL : 465

    public static void Send() throws Exception {
        Properties props = System.getProperties();
        props.put("mail.smtp.host", smtp_host); 
        props.put("mail.smtp.port", smtp_port); 
        props.put("mail.smtp.auth", "true"); 
        props.put("mail.smtp.ssl.enable", "true"); 
        props.put("mail.smtp.ssl.trust", smtp_host);
        
        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(user_email, user_pw);
                    }
                });
        
        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(user_email));

           // 받는 이메일
            message.setRecipients(
                    Message.RecipientType.TO,
                    InternetAddress.parse("XXXXX@gmail.com, XXXXX@naver.com")    
            );
	
	  // 제목
            message.setSubject("테스트 메일입니다."); 
	  
	   // 내용
            message.setText("이것은 테스트 메일입니다. \n\n 잘 갔나요?");

            // 발송
            Transport.send(message);
            
        } catch (MessagingException e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }
}

위 코드를 실행했더니 

Application-specific password required

오류가 발생한다.

구글링 해보니 2차인증 설정시 발생하는 오류라고 함

해결방법은  구글 보안탭에서  앱 비밀번호를 생성해서 사용하면 된다.
 
3. 앱 비밀번호 만들고 사용하기
1) 구글계정으로 이동 (https://myaccount.google.com/)
2) 보안  선택

 

3) 2단계 인증 선택

4) 맨밑에 앱 비밀번호 선택

5) 앱 선택 : 메일, 기기 선택 : windows 컴퓨터, 생성 클릭 하면 16자리 비밀번호가 생성된다.

 

6) 생성된 비밀번호를 user_pw 로 사용하면 메일 잘 발송된다.

 

 

 

 

반응형
jsoup 으로 json, xml 결과 페이지를 호출하면
Unhandled content type. Must be text/*, application/xml, or application/*+xml 
오류가 발생함
 
해결방법은
.ignoreContentType(true)  설정하면 됨
 
Jsoup.connect("/test.json")
  	.ignoreContentType(true)
  	.method(Method.GET)
  	.execute();

혹은 header에 ContentType 을 json이나 xml 로 지정해도 될 듯.

 

끝.

반응형

 

1. json-simple  의존성 추가

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1</version>
</dependency>
 

 

2.  샘플 코드
String jsonText = "{ \"test\" : \"1234\" }";
JSONParser parser = new JSONParser();
Object obj = parser.parse(jsonText);
JSONObject jsonObj = (JSONObject) obj;
String testValue = jsonObj.get("test").toString();
System.out.println("testValue : " + testValue);
// 결과
testValue : 1234

 

반응형
try ~ 오류가 catch가 안 된다.
 
var xReq = new XMLHttpRequest();
xReq.onreadystatechange = function() {
   console.log(xReq.readyState);
  console.log(xReq.status);
}
xReq.open("POST", "http://localhost:9999/test", true);
xReq.send(post);
 
서버 (http://localhost:9999/) 실행 중이지 않은 경우
xReq.send(post); 에서
net::ERR_CONNECTION_REFUSED 오류가 발생한다.
 
그래서, 오류 발생시 처리를 위해...
 
try {
        xReq.send(post);
} catch(err) {
        alert('오류가 발생하였습니다. ');
//
}
 
이런 식으로 try ~ catch ~ 해보았으나 catch 가 안된다.
 
이럴 땐, 아래 처럼 하면 오류시 처리를 할 수 있다.
 
xReq.onerror = function () {
     alert('오류가 발생하였습니다.');
      //
};
 
 
 
끝.
반응형
로컬 테스트시 오류 발생
원인유추
  1. 권한문제
  2. 타임존 인식문제
 
  1. 은 아니었고 왜냐면 툴(workbench)로 잘 접속된다. telnet 해봐도 연결 잘되고
 
검색하다보니,  아래 글을 발견
타임존을 아시아/서울로 설정하니 해결됨.
 
 
mysql-connector-java 5.1.X 버전 이후로 KST 를 인식못하는 오류가 있다.
 
 
또는, 기존 운영중인 서버라면 아래와 같이 Asia/Seoul 로 설정해 준다.

 

타임존을 UTC 또는 Asia/Seoul 로 지정해야 정상적으로 연결된다.또는 커넥터를 낮은 버전으로 해도 된다.
반응형

+ Recent posts