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>");
}
%>
'IT > Java' 카테고리의 다른 글
java - url을 통해 가져온 xml을 DOM 파서로 NodeList 출력 (0) | 2018.11.20 |
---|---|
java - xml DOM파서 (0) | 2018.11.20 |
java - 파일입출력 (0) | 2018.11.16 |
Java - JUnit 픽스처, setUp, tearDown, Before, After, BeforeClass, AfterClass (0) | 2018.11.14 |
java - JUnit 사용 방법 예제 코드 (0) | 2018.11.14 |