java에서 메일보내기
Java에서 Mail보내기
- 테스트는 Spring이 아니라 java를 가지고 했기때문에 별도의 library를 직접 추가해줘야한다. (activation.jar, addtionnal.jar, mail.jar)
- maven을 사용하는 spring 프로젝트일 경우
porm.xml
에 추가가 가능할 것으로 보인다. (해보진 않음)
package mailing;
import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import javax.mail.Authenticator;
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;
public class Mail {
public void pushMail() throws Exception{
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.host", "smtp.gmail.com");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.port", "465");
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.socketFactory.fallback", "false");
properties.setProperty("mail.smtp.quitwait", "false");
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("younmyungjun@gmail.com", "PASSWORD");
}
};
Session session = Session.getDefaultInstance(properties, authenticator);
MimeMessage message = new MimeMessage(session);
message.setSender(new InternetAddress("younmyungjun@gmail.com"));
message.setSubject("Mailing Test");
message.setRecipient(Message.RecipientType.TO, new InternetAddress("yun0244@naver.com"));
Multipart multipart = new MimeMultipart();
MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setText("Test Contents");
multipart.addBodyPart(mimeBodyPart);
MailcapCommandMap mailcapCommandMap = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mailcapCommandMap.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mailcapCommandMap.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mailcapCommandMap.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mailcapCommandMap.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mailcapCommandMap.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mailcapCommandMap);
message.setContent(multipart);
Transport.send(message);
}
}
- 코드는 단순하다. 필요한 설정을 해주고 sender/subject/contents/receiver를 설정해 주고 보내면된다.
- 테스트 코드는 gmail을 기준으로 작성되었으므로 gmail이 아닌 메일로 할 경우에 추가 설정을 찾아봐야한다.
주의 할 점은 google에서는 이렇게 취약한 프로그램을 차단하는 기능이 있어 이를 풀어주고 테스트를 진행해야한다. 그렇지 않으면 알 수 없는 곳에서 로그인을 시도한다는 경고 메시지를 받을 것이다.