IT/Java

java - 이메일 보내기 자바코드, GUI 이메일 보내기 코드 (JFrame), 웹페이지에서 이메일 보내기

노마드오브 2018. 11. 19. 20:49

package com.example.email;


import org.apache.commons.mail.EmailException;

import org.apache.commons.mail.SimpleEmail;


public class SimpleEmailExample {


public static void main(String[] args) {

// 메일 전송기능 라이브러리 준비

// CommonsEmail

// http://commons.apache.org/proper/commons-email

//  ▶ commons-email-1.2.jar

// JavaMail

// http://javaee.github.io/javamail

//  ▶ mail.jar

// JAF(java activation framework)

//  ▶ activation.jar


// SimpleEmail 클래스 : 텍스트 이메일 전송

// MultiPartEmail 클래스 : 메시지와 첨부파일을 함께 전송  


// HtmlEmail 클래스 : 이메일 컨텐츠를 HTML 형식으로 전송

// 이메일 서비스는 메일 전송용 프로토콜인 SMTP를 사용함.

// SMTP 서버 호스트명(IP주소)

// SMTP 서버 포트 : 기본포트 465(SSL) 또는 587(TLS)


// SMTP 서버 계정정보 : 로그인할 아이디, 패스워드

// 네이버 메일 - smtp.naver.com

// 다음 메일 - smtp.daum.net

// 구글 지메일 - smtp.google.com

// https://support.google.com/mail/answer/7126229?hl=ko


long beginTime = System.currentTimeMillis();

// SimpleEmail 객체 생성

SimpleEmail email = new SimpleEmail();

// SMTP 서버 연결 설정

email.setHostName("smtp.gmail.com");

email.setSmtpPort(465);

email.setAuthentication("본인의 지메일 계정", "이메일 비밀번호");

// SMTP 보안 SSL, TLS 설정

email.setSSLOnConnect(true);   // SSL 사용 설정

email.setStartTLSEnabled(true);  // TLS 사용 설정

String result = "fail";

try {

// 보내는 사람 설정

email.setFrom("본인의 지메일 계정", "관리자", "UTF-8");

// 받는 사람 설정

email.addTo("이메일 받을 주소", "받는사람이름", "UTF-8");

// 받는 사람(참조인) 설정

//email.addCc(email, name, charset);

// 받는 사람(숨은참조인) 설정

//email.addBcc(email, name, charset);

// 제목 설정

email.setSubject("메일 제목입니다.");

// 본문 내용 준비

StringBuilder sb = new StringBuilder();

sb.append("메일 본문입니다.\n");

sb.append("두번째 줄입니다.\n");

sb.append("세번째 줄입니다.\n");

// 본문 설정

email.setMsg(sb.toString());

// 메일 전송

result = email.send();

} catch (EmailException e) {

e.printStackTrace();

} finally {

long execTime = System.currentTimeMillis() - beginTime ;

System.out.println("execTime : " + execTime);

System.out.println("result : " + result);

}

} // main()의 끝


}





package com.example.email;


import org.apache.commons.mail.EmailAttachment;

import org.apache.commons.mail.EmailException;

import org.apache.commons.mail.MultiPartEmail;


public class MultiPartEmailExample {


public static void main(String[] args) {

long beginTime = System.currentTimeMillis();

// 첨부파일 생성을 위한 EmailAttachment 객체 생성

EmailAttachment attach = new EmailAttachment();

attach.setPath("D:/images/dog.jpg");

attach.setDescription("강아지 이미지");

//attach.setName("attach1");

// MultiPartEmail 객체생성

MultiPartEmail email = new MultiPartEmail();

// SMTP 서버 연결 설정

email.setHostName("smtp.gmail.com");

email.setSmtpPort(465);

email.setAuthentication("본인의 지메일 계정", "이메일 비밀번호");

// SMTP 보안 SSL, TLS 설정

email.setSSLOnConnect(true);   // SSL 사용 설정

email.setStartTLSEnabled(true);  // TLS 사용 설정

String result = "fail";

try {

// 보내는 사람 설정

email.setFrom("지메일 계정", "관리자", "UTF-8");

// 받는 사람 설정

email.addTo("받는 사람 이메일 주소", "받는 사람 이름", "UTF-8");

// 제목 설정

email.setSubject("첨부파일이 있는 이메일 제목입니다.");

// 본문 설정

email.setMsg("메일본문입니다.\n두번째 줄입니다.\n\n세번째 줄입니다.");

                        // 첨부파일 추가

                        email.attach(attach);

// 메일 전송

result = email.send();

} catch (EmailException e) {

e.printStackTrace();

} finally {

long execTime = System.currentTimeMillis() - beginTime ;

System.out.println("execTime : " + execTime);

System.out.println("result : " + result);

}


} // main()의 끝


}





package com.example.email;


import java.io.File;


import org.apache.commons.mail.EmailException;

import org.apache.commons.mail.HtmlEmail;


public class HtmlEmailExample {


public static void main(String[] args) {

long beginTime = System.currentTimeMillis();

// HtmlEmail 객체생성

HtmlEmail email = new HtmlEmail();

// SMTP 서버 연결 설정

email.setHostName("smtp.gmail.com");

email.setSmtpPort(465);

email.setAuthentication("본인의 지메일 계정", "이메일 비밀번호");

// SMTP 보안 SSL, TLS 설정

email.setSSLOnConnect(true);   // SSL 사용 설정

email.setStartTLSEnabled(true);  // TLS 사용 설정

// 이미지 파일정보 준비

File imgFile = new File("D:\\images\\dog.jpg"); 

String result = "fail";

try {

// 보내는 사람 설정

email.setFrom("지메일 계정", "관리자", "UTF-8");

// 받는 사람 설정

email.addTo("받는사람 이메일 주소", "받는 사람 이름", "UTF-8");

// 제목 설정

email.setSubject("html 메일 제목입니다.");

// 본문 설정

StringBuilder sb = new StringBuilder();

sb.append("<html><body>");

sb.append("내 이름은 홍길동입니다.<br>");

sb.append("<img src=cid:");

sb.append(email.embed(imgFile));

sb.append("</body></html>");

email.setCharset("utf-8");

email.setHtmlMsg(sb.toString());

result = email.send();

} catch (EmailException e) {

e.printStackTrace();

} finally {

long execTime = System.currentTimeMillis() - beginTime ;

System.out.println("execTime : " + execTime);

System.out.println("result : " + result);

}

}


}




*GUI 이메일 보내기 코드 (JFrame)

package com.example.email;


import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;


import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;


import org.apache.commons.mail.EmailAttachment;

import org.apache.commons.mail.EmailException;

import org.apache.commons.mail.MultiPartEmail;

import org.apache.commons.mail.SimpleEmail;


public class GUIEmailApp extends JFrame {

JTextField tf_sender = new JTextField(20); // 보내는 사람

JTextField tf_receiver = new JTextField(20) ; // 받는 사람

JTextField tf_subject = new JTextField(20) ; // 글 제목

JTextArea ta_content = new JTextArea(7, 20) ; // 글 내용

JButton btn_send = new JButton("메일 보내기");

JTextField tf_filename = new JTextField(20);

JButton btn_file = new JButton("파일선택");

JFileChooser chooser = new JFileChooser();

File file = null;

public GUIEmailApp() {

setTitle("간단한 이메일 보내기 앱");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container c = getContentPane();

c.setLayout(new FlowLayout());

tf_sender.setText("보내는 메일 계정정보");

tf_sender.setEditable(false);

c.add(new JLabel("보내는 사람(이메일 주소): "));

c.add(tf_sender);

c.add(new JLabel("받는 사람(이메일 주소): "));

c.add(tf_receiver);

c.add(new JLabel("이메일 제목: "));

c.add(tf_subject);

c.add(new JLabel("파일 선택: "));

c.add(tf_filename);

c.add(btn_file);

c.add(new JLabel("이메일 내용: "));

c.add(new JScrollPane(ta_content));

c.add(btn_send);


btn_file.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

int ret = chooser.showOpenDialog(GUIEmailApp.this);

                if (ret != JFileChooser.APPROVE_OPTION) {

                    JOptionPane.showMessageDialog(GUIEmailApp.this, "파일 선택 안함", "경고", JOptionPane.WARNING_MESSAGE);

                    return;

                }

                

                // 선택한 파일정보 가져오기

                file = chooser.getSelectedFile();

                tf_filename.setText(file.getName());

}

});

btn_send.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String receiver = tf_receiver.getText().trim();

String subject = tf_subject.getText().trim();

String content = ta_content.getText().trim();

if (file == null) {

SimpleEmail(receiver, subject, content);

} else { // file != null

String path = file.getPath();  // 파일이름이 포함된 전체

multiPartEmail(receiver, subject, content, path);

}

}

});

setSize(300, 450);

setVisible(true);

}


public void multiPartEmail (String receiver, String subject, String content, String path) {

long beginTime = System.currentTimeMillis();

EmailAttachment attach = new EmailAttachment();

attach.setPath(path);

MultiPartEmail email = new MultiPartEmail();

email.setHostName("smtp.gmail.com");

email.setSmtpPort(465);

email.setAuthentication("지메일 계정정보", "계정비밀번호");

email.setSSLOnConnect(true);

email.setStartTLSEnabled(true);

String result = null;

try {

// 보내는 사람

email.setFrom("지메일 계정정보", "관리자", "UTF-8");

// 받는 사람

email.addTo(receiver, "", "utf-8");

// 이메일 제목

email.setSubject(subject);

// 이메일 내용

email.setMsg(content);

// 첨부파일 추가

email.attach(attach);  // 여러번 호출 가능. add 추가 형식으로 사용

// 메일 전송

result = email.send();

} catch (EmailException e) {

e.printStackTrace();

} finally {

long execTime = System.currentTimeMillis() - beginTime;

String message = "execTime : " + execTime + "\n";

if (result != null) {

message += "이메일 전송 성공!";

} else {

message += "이메일 전송 실패..";

}

JOptionPane.showMessageDialog(this, message, "전송결과", JOptionPane.INFORMATION_MESSAGE);

}

}

public void SimpleEmail(String receiver, String subject, String content) {


long beginTime = System.currentTimeMillis();

SimpleEmail email = new SimpleEmail();

email.setHostName("smtp.gmail.com");

email.setSmtpPort(465);

email.setAuthentication("지메일 계정정보", "계정비밀번호");

email.setSSLOnConnect(true);

email.setStartTLSEnabled(true);

String result = null;

try {

// 보내는 사람

email.setFrom("지메일 계정정보", "관리자", "UTF-8");

// 받는 사람

email.addTo(receiver, "", "utf-8");

// 이메일 제목

email.setSubject(subject);

// 이메일 내용

email.setMsg(content);

// 메일 전송

result = email.send();

} catch (EmailException e) {

e.printStackTrace();

} finally {

long execTime = System.currentTimeMillis() - beginTime;

String message = "execTime : " + execTime + "\n";

if (result != null) {

message += "이메일 전송 성공!";

} else {

message += "이메일 전송 실패..";

}

JOptionPane.showMessageDialog(this, message, "전송결과", JOptionPane.INFORMATION_MESSAGE);

}

} // simpleEmail()의 끝

public static void main(String[] args) {

new GUIEmailApp();

}


}





emailWrite.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>


<body>

<!-- 게시판 -->

<article>

<h1>이메일 작성 폼</h1>

<form action="emailPro.jsp" method="post" enctype="multipart/form-data" name="frm">

<table id="notice">

<tr><th>보내는 사람</th><td><input type="email" name="sender" value="지메일 계정정보" readonly></td></tr>

<tr><th>받는 사람</th><td><input type="text" name="receiver" required></td></tr>

<tr><th>이메일 제목</th><td><input type="text" name="subject"></td></tr>

<tr><th>첨부파일</th><td><input type="file" name="filename"></td></tr>

<tr><th>이메일 내용</th>

<td><textarea name="content" cols="40" rows="13"></textarea></td>

</tr>

</table>

<input type="submit" value="메일 보내기" class="btn">

<input type="reset" value="다시작성" class="btn">

</form>

</article>

<!-- 게시판 -->

</body>

</html>




emailPro.jsp

<%@page import="org.apache.commons.mail.EmailException"%>

<%@page import="org.apache.commons.mail.MultiPartEmail"%>

<%@page import="org.apache.commons.mail.EmailAttachment"%>

<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>

<%@page import="com.oreilly.servlet.MultipartRequest"%>

<%@page import="java.io.File"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

// 업로드

// 1. request

// 2. upload 폴더의 실제 경로 문자열

String rootPath = application.getRealPath("/");

File uploadFolder = new File(rootPath, "upload"); // 폴더 경로 정보

if (!uploadFolder.exists()) {

    uploadFolder.mkdir();

}

String uploadPath = uploadFolder.getPath();

System.out.println("업로드 경로 : " + rootPath);


// 3. 파일 업로드 최대크기

int maxSize = 1024 * 1024 * 5; // 5MB

// 4. 파일이름 한글처리 "utf-8"

// 5. 파일이름이 동일할 경우 => 파일이름 변경 정책

MultipartRequest multi 

= new MultipartRequest(

        request, 

        uploadPath,

        maxSize, 

        "utf-8", 

        new DefaultFileRenamePolicy());



String sender = multi.getParameter("sender");

String receiver = multi.getParameter("receiver");

String subject = multi.getParameter("subject");

String content = multi.getParameter("content");


String filename = multi.getFilesystemName("filename");


File file = new File(uploadPath, filename);


// 업로드가 끝나면 업로드 경로에 생성한 파일을 첨부파일로 사용함.


long beginTime = System.currentTimeMillis();

      

// 첨부파일 생성을 위한 EmailAttachment 객체 생성

EmailAttachment attach = new EmailAttachment();

attach.setPath(file.getPath());

//attach.setDescription("강아지 이미지");

//attach.setName(""); // 파일이름 변경시 사용


// MultiPartEmail 객체생성

MultiPartEmail email = new MultiPartEmail();

// SMTP 서버 연결 설정

email.setHostName("smtp.gmail.com");

email.setSmtpPort(465);

email.setAuthentication("지메일 계정정보", "계정비밀번호");

// SMTP 보안 SSL, TLS 설정

email.setSSLOnConnect(true); // SSL 사용 설정

email.setStartTLSEnabled(true); // TLS 사용 설정


String result = "fail";


try {

    // 보내는 사람 설정

    email.setFrom(sender, "관리자", "utf-8");

    // 받는 사람 설정

    email.addTo(receiver, "받는사람이름", "utf-8");

    // 제목 설정

    email.setSubject(subject);

    // 본문 설정

    email.setMsg(content);

    // 첨부파일 추가

    email.attach(attach);

    // 메일 전송

    result = email.send(); // 메일 전송이 완료되면

    

    if (file.exists()) {  // 첨부파일이 존재하면

        file.delete(); //  첨부파일 삭제

    }

    

} catch (EmailException e) {

    e.printStackTrace();

} finally {

    long execTime = System.currentTimeMillis() - beginTime;

    // 웹 서버 콘솔에 출력

    System.out.println("execTime : " + execTime);

    System.out.println("result : " + result);

    

    // 브라우저에 출력

    out.println("execTime : " + execTime + "<br>");

    out.println("result : " + result + "<br>");

}

%>