mj@home:~$

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에서는 이렇게 취약한 프로그램을 차단하는 기능이 있어 이를 풀어주고 테스트를 진행해야한다. 그렇지 않으면 알 수 없는 곳에서 로그인을 시도한다는 경고 메시지를 받을 것이다.

Google 보안 수준 설정