[Spring] Gmail 인증 메일 보내기
Java1. gmail 계정 설정
gmail > 환경 설정 > 전달 및 pop/IMAP > IMAP 액세스 > IMAP 사용으로 변경 내 계정 >
로그인 및 보안 > 연결된 앱 및 사이트 > 보안 수준이 낮은 앱 허용 : 사용으로 변경
2. pom.xml
<!-- GoogleMail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- GoogleMail -->
3. root-context.xml
<!-- Google Email -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com"/>
<property name="port" value="587"/>
<property name="username" value="googleId" />
<property name="password" value="googlePassword"/>
<property name="javaMailProperties">
<props>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.debug">true</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
4. EmailHandler.java
import java.io.UnsupportedEncodingException;
import java.util.Random;
import javax.activation.DataSource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public class EmailHandler {
private JavaMailSender mailSender;
private MimeMessage msg;
private MimeMessageHelper msgHelper;
public EmailHandler() {}
public EmailHandler(JavaMailSender mailSender) {
try {
this.mailSender = mailSender;
msg = this.mailSender.createMimeMessage();
msgHelper = new MimeMessageHelper(msg, true, "UTF-8");
} catch (MessagingException e) {
e.printStackTrace();
}
}
public void setSubject(String subject) throws MessagingException {
msgHelper.setSubject(subject);
}
public void setText(String htmlContent) throws MessagingException {
msgHelper.setText(htmlContent, true);
}
public void setFrom(String email, String name)
throws UnsupportedEncodingException, MessagingException {
msgHelper.setFrom(email, name);
}
public void setTo(String email) throws MessagingException {
msgHelper.setTo(email);
}
public void addInline(String contentId, DataSource dataSource) throws MessagingException {
msgHelper.addInline(contentId, dataSource);
}
public void send() {
mailSender.send(msg);
}
// 인증키 랜덤
public String randomKey() {
StringBuffer key = new StringBuffer();
Random rnd = new Random();
for (int i = 0; i < 6; i += 1) {
int rIndex = rnd.nextInt(2);
switch (rIndex) {
case 0:
key.append((char) ((int) (rnd.nextInt(26)) + 65));
break; // A-Z
case 1:
key.append(rnd.nextInt(10));
break; // 0-9
}
}
return key.toString(); // StringBuffer -> String
}
}
5. Persistence.java
@Autowired
JavaMailSender mailSender;
@Override
public void sendGmail(String toEmail, String key) {
try {
EmailHandler sendMail = new EmailHandler(mailSender);
sendMail.setSubject("회원가입 인증 메일");
sendMail.setText(new StringBuffer().append("회원가입 인증 메일입니다<br>")
.append("<a href='http://localhost:8080/spring/emailCheck?key=")
.append(key)
.append("' target='_blenk'>인증</a>").toString());
sendMail.setFrom("FromMail", "FromName");
sendMail.setTo(toEmail);
sendMail.send();
cnt = 1;
} catch (Exception e) {
e.printStackTrace();
}
}
6. 인증 처리
Controller.java
@RequestMapping("emailCheck")
public String emailCheck(HttpServletRequest req, Model model) {
System.out.println("emailCheck()");
hs.confirmEmailKey(req, model);
return "jsp/join/emailCheck";
}
Service.java
public void confirmEmailKey(HttpServletRequest req, Model model) {
String key = req.getParameter("key");
int cnt = dao.confirmEmailKey(key);
model.addAttribute("cnt", cnt);
}
Persistence.java
@Override
public int confirmEmailKey(String e_key) {
int cnt = mapper.confirmEmailKey(e_key);
return cnt;
}