English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring Java Mail

Spring 프레임워크는 이메일을 보내고 받는 데 사용할 수 있는 많은 유용한 인터페이스와 클래스를 제공합니다.

org.springframework.mail 이 소프트웨어 패키지는 Spring 프레임워크에서 이메일 지원의 뿌리 패키지입니다.

Spring Java Mail API

Spring 프레임워크에서 Java 이메일을 지원하는 인터페이스와 클래스는 다음과 같습니다:

MailSender 인터페이스: 이는 뿌리 인터페이스입니다. 간단한 이메일을 보내는 기본 기능을 제공합니다. JavaMailSender 인터페이스: 이는 MailSender의 서브 인터페이스입니다. MIME 메시지를 지원합니다. 주로 MimeMessageHelper 클래스와 함께 사용하여 JavaMail MimeMessage 그리고 첨부 파일 등과 함께 사용이 권장됩니다. MimeMessagePreparator 이 인터페이스를 사용하기 위한 메커니즘 JavaMailSenderImpl 클래스: 이 클래스는 JavaMailSender 인터페이스의 구현을 제공합니다. JavaMail MimeMessages와 Spring SimpleMailMessages를 지원합니다. SimpleMailMessage 클래스: 간단한 이메일을 생성하는 데 사용되며, 발신자, 수신자, 참조자, 제목 및 이메일 본문을 포함합니다. MimeMessagePreparator 인터페이스: JavaMail MIME 메시지를 준비하는 콜백 인터페이스입니다. MimeMessageHelper 클래스: MIME 메시지를 생성하는 도구 클래스입니다. 이미지, 표준 이메일 첨부 파일 및 HTML 텍스트 내용과 같은 내장 요소를 지원합니다.

Spring에서 Gmail 서버를 통해 이메일을 보내는 예제

두 개의 Spring 이메일 클래스를 사용하여:

SimpleMailMessage 메시지를 생성하는 데 사용됩니다. JavaMailSenderImpl 메시지를 전송하는 데 사용됩니다.

Spring 프레임워크를 통해 이메일을 보내기 위해 다음과 같은 파일을 생성해야 합니다.

MailMail.java applicationContext.xml Test.java 이 예제를 실행하려면 mail.jar와 activation.jar 파일을 로드해야 합니다.

mail.jar와 Activation.jar를 다운로드하거나 Oracle 웹사이트에서 최신 버전을 다운로드하세요.


1)MailMail.java

이는 mailSender 속성을 정의하는 간단한 클래스입니다. 실행 시 MailSender 객체를 이 속성에 제공합니다.

sendMail() 메서드에서 우리는 SimpleMailMessage의 인스턴스를 생성하고, 정보(예: 발신자, 수신자, 제목 및 메시지)를 이 객체에 저장하고 있습니다.

여기서 MailSender 인터페이스의 send() 메서드를 사용하여 간단한 이메일을 전송합니다.

package com.w3codebox;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
 
public class MailMail{
  private MailSender mailSender;
 
  public void setMailSender(MailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(String from, String to, String subject, String msg) {
        //creating message
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);
    message.setSubject(subject);
    message.setText(msg);
        //sending message
    mailSender.send(message); 
  }
}

2)applicationContext.xml

이 xml 파일에서 우리는 JavaMailSenderImpl 클래스에 bean을 생성했습니다. 다음과 같은 속성 값을 정의해야 합니다:

호스트 사용자 이름 비밀번호 javaMailProperties

우리는 MailMail 클래스에 bean을 생성하기 위해 mailSender 속성을 사용할 것입니다. 지금, MailMail 클래스의 mailSender 속성에 JavaMailSenderImpl 클래스의 인스턴스를 설정할 것입니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
  xmlns:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="smtp.gmail.com" />
  <property name="username" value="[email protected]" />
  <property name="password" value="yourgmailpassword" />
  <property name="javaMailProperties">
     <props>
              <prop key="mail.smtp.auth">true<//prop>
              <prop key="mail.smtp.socketFactory.port">465</prop>
              <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
              <prop key="mail.smtp.port">465</prop>
        </props>
  </property>
</bean>
<bean id="mailMail" class="com.w3codebox.MailMail">
  <property name="mailSender" ref="mailSender" />
</bean>
</beans>

3)Test.java

이 클래스는 applicationContext.xml 파일에서 mailMail bean을 가져오고 MailMail 클래스의 sendMail 메서드를 호출합니다.

package com.w3codebox;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class Test { 
public static void main(String[] args) {
  
Resource r = new ClassPathResource("applicationContext.xml");
BeanFactory b = new XmlBeanFactory(r);
MailMail m = (MailMail)b.getBean("mailMail");
String 보내는 사람="[email protected]";//여기에 보내는 사람의 Gmail ID를 입력하세요
String 수신자="[email protected]";//여기에 수신자 ID를 입력하세요
m.sendMail(sender,receiver,"hi","welcome");
  
System.out.println("success");
}
}

이 예제를 어떻게 실행하나요

core와 Java 이메일을 위해 spring jar 파일을 로드하세요 mail.jar와 activation.jar를 로드하세요 applicationContext.xml 파일에서 사용자 이름과 비밀번호 속성을 변경하고, 자신의 gmail ID와 비밀번호를 지정하세요。 Test.java 파일에서 발신자 gmail ID와 수신자 이메일 ID를 변경하세요。 Test 클래스를 컴파일하고 실행하세요


호스트 제공자가 제공하는 서비스를 통해 Spring에서 이메일을 보내는 예제

자신의 사이트가 있다면, 이메일 서버를 사용할 수 있습니다. MailMail.java와 Test 클래스는 동일합니다. Test.java 파일에서 발신자 이메일 ID를 변경하면 됩니다. applicationContext.xml 파일에서도 일부 변경이 필요합니다。

applicationContext.xml 파일에서 사용하고 있습니다:

mail.unitedsquaad.com을 호스트 이름으로 사용합니다. 변경하세요。 [email protected]을 사용자 이름으로 사용합니다. 변경하세요。 xxxxx를 비밀번호로 사용합니다. 변경하세요。

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
  xmlns:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="mail.unitedsquaad.com" />
  <property name="username" value="[email protected]" />
  <property name="password" value="xxxxx" />
 
  <property name="javaMailProperties">
     <props>
              <prop key="mail.smtp.auth">true<//prop>
           </props>
  </property>
</bean>
<bean id="mailMail" class="MailMail">
  <property name="mailSender" ref="mailSender" />
</bean>
 
</beans>

여러 수신자에게 이메일을 보내는 방법

SimpleMailMessage 클래스를 사용하여 여러 수신자에게 이메일을 보낼 수 있습니다. SimpleMailMessage 클래스는 setTo(String []수신자)이 메서드는 여러 수신자에게 메시지를 보내는 데 사용됩니다. 간단한 코드를 보겠습니다.

      ....
  public void sendMail(String from, String[] to, String subject, String msg) {
        //creating message
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);//passing array of recipients
    message.setSubject(subject);
    message.setText(msg);
        //sending message
    mailSender.send(message); 
  }
     ...

Spring MimeMessagePreparator 예제

MimeMessagePreparator 인터페이스를 통해 mime 메시지를 보낼 수 있습니다. 이 인터페이스는 prepare(MimeMessage message) 메서드를 가집니다.

우리가 mime 메시지를 보내는 간단한 코드를 보겠습니다.

  import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;
public class MailMail{
  private JavaMailSender mailSender;
 
  public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(final String from, final String to, final String subject, final String msg) {
      
    MimeMessagePreparator messagePreparator = new MimeMessagePreparator() {
          
                public void prepare(MimeMessage mimeMessage) throws Exception {
                   mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                   mimeMessage.setFrom(new InternetAddress(from));
                   mimeMessage.setSubject(subject);
                   mimeMessage.setText(msg);
                }
        };
        mailSender.send(messagePreparator);
  }
}

applicationContext.xml과 Test.java 파일은 위에 나열된 것과 동일합니다。


Spring MimeMessageHelper 예제를 통해 데이터 부착을 보내는 방법

MimeMessageHelper 클래스의 도움으로 Spring에서 데이터 부착이 포함된 mime 메시지를 보내는 것을 도와줍니다. MimeMessagePreparator를 권장합니다.

데이터 부착(이미지)가 포함된 mime 메시지를 보내는 간단한 코드를 보겠습니다.

import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public class MailMail{
  private JavaMailSender mailSender;
 
  public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(final String from, final String to, final String subject, final String msg) {
    try{
    MimeMessage message = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(msg);
    // 파일 추가
    FileSystemResource file = new FileSystemResource(new File("c:",/rr.jpg"));
    helper.addAttachment("mybrothermage.jpg", file);//이 이름으로 이미지가 전송됩니다
    mailSender.send(message);
    catch(MessagingException e){e.printStackTrace();}
  }
}

applicationContext.xml과 Test.java 파일은 위에 나열된 것과 동일합니다。