Search

레이블이 Library인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Library인 게시물을 표시합니다. 모든 게시물 표시

2016년 10월 22일 토요일

[Java] [Library] 이메일 보내는 프로그램 만들기. (JavaMail API 이용)

#1. 들어가기
자바로 프로그래밍을 하다보면, 작업을 완료했거나, 에러가 생겼을때, 혹은 특정 시점에 메세지나 이메일을 사용자에게 보내주는 알림 기능이 필요할 때가 있다.
이번 글에서는 간단하게 JavaMail API와 네이버메일을 이용해 메일링하는 방법을 알아본다.



#2. 네이버메일 SMTP 설정하기
먼저 네이버에 로그인해서 환경설정을 해줘야 한다.

  2-1. 네이버 로그인

  2-2. '메일' 들어가기








  2-3. '환경설정' 들어가기







  2-4. 'SMTP' 설정하기
















- SMTP 설정을 하게되면 아래와 같은 정보를 확인할 수 있다.









#3. JavaMail API 다운받기
메이븐 레파지토리에는 거의 없는게 없다.. 이곳에서 다운받아보자.
https://mvnrepository.com/artifact/javax.mail/mail/1.4.7



























#4. Eclipse에서 Java 프로그래밍
이제 환경설정은 다 끝났으니, 본격적으로 이클립스에서 메일을 보내보자.

  4-1. 다운받은 mail-1.4.7.jar파일을 라이브러리에 추가하기
먼저, mail-1.4.7.jar 파일을 복사한 후, 자바프로젝트에 붙여넣어주자.
(개인적으로 정리하는 편이 프로그래밍을 할 때 편해서 lib폴더를 만들어 안에 넣었다.)
다음으로, 붙여넣은 jar파일에 마우스를 대고 우클릭을 한 후에 Build Path -> Add to Build Path를 눌러주자.




- 제대로 jar파일을 추가했다면, 아래와 같이 Referenced Libraries에 추가된다.












  4-2. 간단한 메일보내기 프로그램 작성하기
나름 작명을 해서(?) SendEmail이라는 클래스를 하나 만들었다.
(역시 정리를 위해 kr.sam.dev.martin이라는 패키지를 만들었는데, 저것까지 따라 만들 필요는 없다... 작명은 다들 취향것...)

① 보내는 쪽의 메일 설정 부분. (우리는 네이버로 설정을 했었다.)
② 받는 사람의 메일 주소.
③ 메일 제목.
④ 메일 내용.




























- SendEmail 클래스의 소스코드

package kr.sam.dev.martin;

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.naver.com";
  final String user   = "NAVER_ID";
  final String password  = "PASSWORD";

  String to     = "ruserive@gmail.com";

  
  // Get the session object
  Properties props = new Properties();
  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);
   }
  });

  // Compose the message
  try {
   MimeMessage message = new MimeMessage(session);
   message.setFrom(new InternetAddress(user));
   message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

   // Subject
   message.setSubject("[Subject] Java Mail Test");
   
   // Text
   message.setText("Simple mail test..");

   // send the message
   Transport.send(message);
   System.out.println("message sent successfully...");

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


  4-3. 테스트 및 확인
프로그램을 실행시키면 아래처럼 메일이 성공적으로 보내졌단 메세지가 뜬다.






그리고 받은쪽 메일에 들어가보면 아래처럼 내가 보낸 메일이 와있는 것을 확인할 수 있다.

















어때요 JavaMail API를 이용한 메일보내기, 참 쉽죠?






2015년 11월 13일 금요일

[JAVA] [Library] 웹 페이지의 내용을 가져와보자. HttpClient 튜토리얼.

* 웹페이지의 내용을 쉽게 가져오기 위해 HttpClient 라이브러리를 사용해보자.
* 먼저 아래의 사이트에서 Binary로 된 압축파일을 하나 다운 받아 압축을 풀자.
* http://hc.apache.org/downloads.cgi



































* 위와같이 HttpClient 파일이 준비되었다면, 이클립스를 열어 Java프로젝트를 생성하자.
* 본 글에서는 프로젝트명을 httpClient로 했고, 정리정돈을 위해 lib 폴더를 만들었다..









* 좀전에 압축 푼 파일의 lib폴더에 있는 모든 .jar 파일들을 프로젝트 내 lib 폴더로 복사하자.



















* 이클립스에 복사된 모든 .jar파일을 선택해 빌드패쓰에 추가해주자.
* 우클릭 -> Build Path -> Add to Build Path





































* 정상적으로 빌드패쓰에 추가가 되었다면 다음과 같은 화면이 나올 것이다.


























* 다음으로는 이 라이브러리를 사용하기 위해 src 폴더에 기본 예제 소스코드들을 추가해보자. 아래 첨부 그림들 참조.
* src에서 우클릭 -> Import -> General -> File System -> Browse

























































* 디랙토리 선택 창까지 왔다면, 아까 압축 푼 파일의 examples 폴더를 선택하고 확인버튼을 눌러주자.
* 그러면 아래와 같이 파일시스템 좌측에 선택한 폴더가 뜨는데, 거기서 체크버튼을 누르고 완료한다.




























* Import가 성공하면 아래와 같이 모든 examples 패키지가 들어가게 된다.








































* 여기서 ClientWithResponseHandler를 열어보면 아래와 같은데, HttpGet의 주소명을 변경하고 실행하면 웹페이지의 내용을 가져올 수 있다.
package org.apache.http.examples.client;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 * This example demonstrates the use of the {@link ResponseHandler} to simplify
 * the process of processing the HTTP response and releasing associated resources.
 */
public class ClientWithResponseHandler {

    public final static void main(String[] args) throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            HttpGet httpget = new HttpGet("http://www.google.com/");

            System.out.println("Executing request " + httpget.getRequestLine());

            // Create a custom response handler
            ResponseHandler responseHandler = new ResponseHandler() {

                @Override
                public String handleResponse(
                        final HttpResponse response) throws ClientProtocolException, IOException {
                    int status = response.getStatusLine().getStatusCode();
                    if (status >= 200 && status < 300) {
                        HttpEntity entity = response.getEntity();
                        return entity != null ? EntityUtils.toString(entity) : null;
                    } else {
                        throw new ClientProtocolException("Unexpected response status: " + status);
                    }
                }

            };
            String responseBody = httpclient.execute(httpget, responseHandler);
            System.out.println("----------------------------------------");
            System.out.println(responseBody);
        } finally {
            httpclient.close();
        }
    }
}

2015년 11월 5일 목요일

[JAVA] [Library] OpenCSV를 이용한 CSV 파일 파싱, 변환.

* CSV 파일은 쉼표로 구분된 파일을 말한다. 그런데, 때에 따라서 쉼표를 '|' 와 같은 형태로 구분해야 한다던가 하는 일도 생기기 마련이다.
* 그 때 유용한 것이 OpenCSV라는 JAVA라이브러리이다.
* 다운로드는 아래의 소스포지 사이트에서 받을 수 있으며, 본 블로그에서는 opencsv-3.5.jar 버젼을 사용했다.

http://sourceforge.net/projects/opencsv/


* 먼저, 아래와 같이 openCSV 라는 자바 프로젝트를 만들고, openCSV라는 패키지 안에
읽기에 필요한 클래스(CSVRead),
쓰기에 필요한 클래스(CSVWrite),
조작을 위한 메인 클래스(Driver)를 만들었다.
* 다음으로, lib 폴더에는 다운받은 jar파일을 넣어서 Build Path에 추가했고,
input 폴더와 output 폴더를 만들었고(정리정돈을 위해..),
input 폴더에는 테스트를 위한 csv파일 하나를 미리 넣어두었다.




















* CSVRead 클래스의 소스

package openCSV;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import com.opencsv.CSVReader;

public class CSVRead {

  private String filename = "input\\test.csv";

  public CSVRead() {}

  public List<String[]> readCsv() {

    List<String[]> data = new ArrayList<String[]>();

    try {
      // CSVReader reader = new CSVReader(new FileReader(filename), '\t');
      // UTF-8
      CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(filename), "UTF-8"));
      String[] s;

      while ((s = reader.readNext()) != null) {
        data.add(s);
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return data;
  }
}

* CSVWrite 클래스의 소스

package openCSV;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import com.opencsv.CSVWriter;

public class CSVWrite {

  private String filename = "output\\test.txt";

  public CSVWrite() {}

  public void writeCsv(List data) {
    try {
      CSVWriter cw = new CSVWriter(new FileWriter(filename), '|', CSVWriter.NO_QUOTE_CHARACTER);
      Iterator it = data.iterator();
      try {
        while (it.hasNext()) {
          String[] s = (String[]) it.next();
          cw.writeNext(s);
        }
      } finally {
        cw.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

}


* Driver 클래스의 소스

package openCSV;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Driver {

  public static void main(String[] args) {

    List<String[]> data = new ArrayList<String[]>();
    CSVRead read = new CSVRead();
    data = read.readCsv();
    Iterator<String[]> it = data.iterator();

    while (it.hasNext()) {
      String[] array = (String[]) it.next();
      for (String s : array) {
        System.out.print(s + " ");
      }
      System.out.print("\n");
    }

    // 이곳은 데이터를 파일로 쓰기 위한 코드     CSVWrite cw = new CSVWrite();     cw.writeCsv(data);   } }

* 단순히 CSV파일을 읽기만 하려면, Driver 클래스에서 주석을 달아둔 부분 아래를 생략하고 실행하면 된다.