들어가기 전
메일 서버 구축 후 메일을 테스트하는 과정에서 telnet으로 테스트를 하다, java 파일로 mail test파일을 만들어 두면 두고두고 사용하지 않을까 싶어 방법을 찾고 정리하고자 한다.
먼저, 나는 거창한 프로젝트가 아니라 class 하나로 구성하여 메일을 발송하고자 했고, 메모장으로 코드를 작성한 뒤 확장자를 java로 바꾸고, javac로 컴파일을 한 뒤 class 파일을 실행할 계획을 했다.
그렇다면 필수적으로 필요한 파일은 자바 메일 라이브러리 2개와, jdk가 설정되어 있어야 한다. 또한 메일을 발송하기에 메일 서버가 필요한데 보통 네이버, 지메일을 많이 이용한다. 이를 이용하려면 해당 계정으로 로그인 후 설정이 필요하다.
지메일의 경우 설정에 들어가 수준낮은 앱 로그인에 허용한다면 java파일에서 해당 이메일과 비밀번호를 입력 후 바로 테스트를 할 수 있다. 이 포스팅은 gmail 기준이다.
java - 설치 및 환경변수 확인
다운로드
activation-1.1.jar [ activation ]
mail-1.4.7.jar [ mail ]
jdk8 [ JDK 8]
java jdk는 오라클 홈페이지에서 로그인 후 다운로드 받아야한다. 또한 환경 변수까지 해놔야 CMD창에서 바로 테스트를 할 수 있다.
메일 계정
Google 기준으로 설명하자면
우측 google계정 관리 > 보안 > '보안 수준이 낮은 앱의 액세스' 를 클릭해서 사용으로 만들어주면 설정은 끝난다. 임시 비밀번호를 받아 사용하는 방법도 있는데 여기서는 다루지 않을거다.
java
ide 파일도 필요 없이 윈도우 기본 기능인 메모장을 켜서 아래의 코드를 넣고 저장할 때 확장자를 java로 변경한다.
import java.util.Date;
import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
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 app{
public static void main(String args[]) {
sendMail();
}
/**
* SendMail
*/
public static void sendMail() {
final String bodyEncoding = "UTF-8"; //콘텐츠 인코딩
String subject = "테스트 메일 ";
String fromEmail = "test@test.com";
String fromUsername = "test";
// 메일을 받은 이메일
// 콤마(,)로 구분 됨
String toEmail = "";
// 발송할 이메일 계정과 비밀번호
final String email_id = "";
final String email_pw = "";
// 메일에 출력할 텍스트
StringBuffer sb = new StringBuffer();
sb.append("<h2> 메일 테스트 입니다. </h4>\n");
String html = sb.toString();
// 메일 옵션 설정
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.quitwait", "false");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
try {
// 메일 서버에서 해당 이메일의 인증
Authenticator auth = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(email_id, email_pw);
}
};
// 메일 세션 생성
Session session = Session.getInstance(props, auth);
// 메일 송/수신 옵션 설정
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail, fromUsername));
message.setRecipients(RecipientType.TO, InternetAddress.parse(toEmail, false));
message.setSubject(subject);
message.setSentDate(new Date());
// 메일 콘텐츠 설정
Multipart mParts = new MimeMultipart();
MimeBodyPart mTextPart = new MimeBodyPart();
MimeBodyPart mFilePart = null;
// 메일 콘텐츠 - 내용
mTextPart.setText(html, bodyEncoding, "html");
mParts.addBodyPart(mTextPart);
// 메일 콘텐츠 설정
message.setContent(mParts);
// MIME 타입 설정
MailcapCommandMap MailcapCmdMap = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
MailcapCmdMap.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
MailcapCmdMap.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
MailcapCmdMap.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
MailcapCmdMap.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
MailcapCmdMap.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(MailcapCmdMap);
// 메일 발송
Transport.send( message );
// 발송 확인
System.out.println("-- 발송 완료 --");
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
javac로 컴파일해서 class파일 만들기
cmd창을 먼저 열어 아래 3개의 명령어를 입력한다.
// 메일 라이브러리 2개를 cmd에 세팅한다.
SET CLASSPATH=%CLASSPATH%;D:\activation-1.1.jar;D:\mail-1.4.7.jar;
// javac로 app.java를 실행하여 class파일을 만들어 준다.
javac -encoding utf-8 app.java
// java로 app.class를 실행한다. (확장자 생략)
java app
메일 발송이 완료된다.
참고
[SMTP] JAVA로 메일 발송 하기. (With. 첨부파일 )
0. 서론 JAVA에서 Gmail을 이용하여 메일을 발송하는 예제를 만들어보려고 한다. 굳이 프로젝트를 생성하지 않고 JAVA파일과 jar파일 2개만 있으면 쉽게 만들 수 있다. 그래도, 프로젝트를 만들고 싶
heodolf.tistory.com
'Dev > JAVA' 카테고리의 다른 글
[JAVA] HttpConnect를 통해 API 호출 및 데이터 받기 (0) | 2023.11.09 |
---|---|
[JAVA] 반복문과 정규식을 같이 사용하기 (XSS 대응 및 정규식 설명) (0) | 2023.08.16 |