JAVA 프로그래밍/JAVA

[Java] 구글계정으로 이메일 보내기

2016. 11. 2. 18:57

구글 계정을 이용하여 이메일 보내기

package example;

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import java.util.regex.Pattern;

import javax.activation.DataHandler;
import javax.activation.URLDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class MailTest {

	public static void sendMail() {
		String fromEmail = "보내는 사람의 이메일 주소";
		String email_pwd = "보내는 사람의 이메일 비밀번호";
		String toEmail = "받는 사람의 이메일주소";
		String filepath = "http://www.koreadaily.com/_data/article_img/2016/09/06/"; // https는 오류발생
		String filename = "174341677.jpg";

		// 이메일 정규식 체크
		String emailPattern = "^[_a-z0-9-]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$";
		boolean check = Pattern.matches(emailPattern, toEmail);

		if(check) {
			Properties p = new Properties();

			// Google 계정 설정
			p.put("mail.smtp.user", fromEmail);
			p.put("mail.smtp.host", "smtp.gmail.com");
			p.put("mail.smtp.port", "465");
			p.put("mail.smtp.starttls.enable","true");
			p.put("mail.smtp.auth", "true");
			p.put("mail.smtp.debug", "true");
			p.put("mail.smtp.socketFactory.port", "465");
			p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
			p.put("mail.smtp.socketFactory.fallback", "false");

			// worksmobile 계정 설정
//			p.put("mail.smtp.host", "smtp.worksmobile.com");
//			p.put("mail.smtp.socketFactory.port", "465");
//			p.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
//			p.put("mail.smtp.auth", "true");
//			p.put("mail.smtp.port", "465");

			//Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

			try {
				Session session = Session.getInstance(p, new javax.mail.Authenticator() {
					protected PasswordAuthentication getPasswordAuthentication() {
						return new PasswordAuthentication(fromEmail, email_pwd);
					}
				});

				session.setDebug(true); // 메일을 전송할 때 상세한 상황을 콘솔에 출력한다.

				String strContent = "테스트 내용입니다. 1\n\n"+
						"테스트 내용입니다. 2\n"+
						"테스트 내용입니다. 3\n"+
						"테스트 내용입니다. 4\n"+
						"테스트 내용입니다. 5\n";
				String subject	= "테스트 제목입니다.";
				String content	= "<html>"+
						"<head><meta charset='utf-8'></head>"+
						"<body>"+
						"<p>"+strContent.replace("\n", "<br />")+"</p>"+
						"</body>"+
						"</html>";

				String document = filepath+filename;

				MimeMessage message = new MimeMessage(session);

				// 1. 보내는 사람 설정
				message.setFrom(new InternetAddress(fromEmail, "베로베로스", "EUC-KR"));

				// 2. 받는 사람 설정
				message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));

				// 3. 제목 설정
				message.setSubject(subject, "EUC_KR");

				// 4. 본문내용 설정
				message.setContent(content, "text/html; charset=EUC-KR");

				message.setHeader("Content-Transfer-Encoding", "quoted-printable");

				MimeBodyPart bodypart = new MimeBodyPart();
				bodypart.setContent(content, "text/html; charset=euc-kr");
				Multipart multipart = new MimeMultipart();
				multipart.addBodyPart(bodypart);

				MimeBodyPart attachPart = new MimeBodyPart();

				// URL로부터 파일을 첨부
				URL url = null;
				try {
					url = new URL(document);
					URLDataSource source = new URLDataSource(url);

					 // 5. 첨부파일 설정
					attachPart.setDataHandler(new DataHandler(source));
					//attachPart.setFileName(filename); // 파일명
				} catch (MalformedURLException e) {
					e.printStackTrace();
				}

				try {
					// 6. 파일명 설정
					attachPart.setFileName(MimeUtility.encodeText(filename, "euc-kr", "B"));
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}

				multipart.addBodyPart(attachPart);

				message.setContent(multipart);

				Transport.send(message); // 7. 메일 보내기
				System.out.println("* 이메일 SMTP서버를 이용한 메일보내기 성공");
			} catch (Exception e) {
				e.printStackTrace();

				// 메일 검증 실패
				if("javax.mail.AuthenticationFailedException".equals(e.toString())) {
					System.out.println("* 이메일 검증에 실패 했습니다. 정보를 올바르게 입력하세요.");
					return;
				} else {
					System.out.println("* 메일 전송 중 오류가 발생하였습니다.");
					return;
				}
			}
		} else {
			System.out.println("* 이메일이 올바르지 않습니다.");
			return;
		}
	}

	public static void main(String[] args) {
		sendMail();
	}
}



[실행화면]





[필요한 JAR파일 첨부]


activation.jar

javax.mail.jar




[Reference]


* IMAP을 사용하여 다른 이메일 클라이언트에서 Gmail 메일 읽기

https://support.google.com/mail/answer/7126229?hl=ko&visit_id=1-636137362827362560-3020679778&rd=1#ts=1665018%2C1665144

저작자표시 비영리 변경금지 (새창열림)

'JAVA 프로그래밍 > JAVA' 카테고리의 다른 글

[Java] 날짜 관련 함수 모음  (0) 2016.11.02
K's 개발이야기베로베로스 님의 블로그입니다.
베로베로스
K's 개발이야기
베로베로스
전체
오늘
어제
  • 전체보기 (22)
    • 개발 도구 (3)
    • JAVA 프로그래밍 (3)
      • JAVA (2)
      • JSP (1)
    • Web 프로그래밍 (14)
      • CSS (1)
      • HTML (0)
      • Javascript & jQuery (8)
      • Spring Framework (4)
      • 웹디자인 (1)
    • Server 프로그래밍 (1)
      • Node.js (0)
      • 서버 개발 지식 (1)
    • 온라인 개발 강의 (0)
    • 티스토리 꾸미기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.
베로베로스
[Java] 구글계정으로 이메일 보내기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.