간단하게 SMTP로 메일 보내는 방법을 기술한다.
보안적으로 약간은 부족할수있다.
먼져 설정해야 할것은 Gmail 설정을 해줘야 한다.
1. 앱 비밀번호 만들기
구글 계정에 로그인하여 보안을 선택해준다.
로그인하는 방법에서 2단계 인증을 추가해준다.
2단계 인증절차를 진행해준다.
설정을 완료하면 2단계 인증 설정이 완료된다.
앱 이름을 적어주고 앱비밀번호를 설정해준다.
생성된 앱정보를 확인 가능하다.
그럼 중요한 코드
Java maven 을 기준으로 하면 먼져 의존성을 추가해주고 코드를 작성하면 끝난다.
pom.xml 파일에 추가해준다.
```
<!-- Gmail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
```
application.properities 에 mail 정보를 기입해준다.
```
#gmail
email.user=email
email.password=password
email.smtp.host=smtp.gmail.com
email.smtp.port=465
```
메일 작성코드를 작성해준다.
```
package com.shop.controller;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EmailSender {
private Properties emailConfig;
public EmailSender() throws Exception {
this.emailConfig = loadEmailConfig();
}
private Properties loadEmailConfig() throws Exception {
Properties props = new Properties();
// application.properties 파일을 로드합니다.
props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties"));
return props;
}
public void sendEmail(String recipient, String subject, String text) throws MessagingException {
Properties props = createEmailProperties();
Session session = createSession(props);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailConfig.getProperty("email.user")));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));
message.setSubject(subject);
message.setText(text);
Transport.send(message);
}
private Properties createEmailProperties() {
Properties props = new Properties();
props.put("mail.smtp.host", emailConfig.getProperty("email.smtp.host"));
props.put("mail.smtp.port", emailConfig.getProperty("email.smtp.port"));
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.trust", emailConfig.getProperty("email.smtp.host"));
return props;
}
private Session createSession(Properties props) {
return Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(emailConfig.getProperty("email.user"), emailConfig.getProperty("email.password"));
}
});
}
public static void main(String[] args) {
try {
EmailSender sender = new EmailSender();
sender.sendEmail("testemailaddress@gmail.com", "테스트 메일입니다.", "이것은 테스트 메일입니다. \n\n 잘 갔나요?");
} catch (Exception e) {
e.printStackTrace();
}
}
}
```