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