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

Servlet 이메일 전송

Servlet를 사용하여 이메일을 보내는 것은 매우 간단합니다만, 먼저 여러분의 컴퓨터에 설치해야 합니다 JavaMail APIJava Activation Framework) JAF)

  • 가장 최신 버전의 Java 웹사이트에서 다운로드할 수 있습니다: JavaMail웹페이지의 오른쪽에 있는 다운로드 링크를 클릭하여 다운로드하세요。

  • 가장 최신 버전의 Java 웹사이트에서 다운로드할 수 있습니다: JAF(버전) 1.1.1)

도서관에서 제공하는 다운로드 링크를 사용할 수도 있습니다:

이 파일을 다운로드하고 압축을 풀어서, 새로 생성된 최상위 디렉토리에서는 이 두 개의 애플리케이션의 일부 jar 파일을 찾을 수 있습니다. 이 jar 파일을 mail.jaractivation.jar 파일을 CLASSPATH에 추가하세요.

간단한 이메일을 보내기

아래의 예제는 사용자 컴퓨터에서 간단한 이메일을 보내는 것입니다. 여기서는 사용자의로컬 호스트인터넷에 연결되어 있으며 이메일을 보내는 데 지원됩니다. 동시에 Java Email API 패키지와 JAF 패키지의 모든 jar 파일이 CLASSPATH에서 사용 가능하도록 확인하십시오.

// 파일 이름 SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 받는 사람의 이메일 ID
      String to = "[email protected]";
 
      // 보내는 사람의 이메일 ID
      String from = "[email protected]";
 
      // 당신이 로컬 호스트에서 이메일을 보내는 것을 가정합니다
      String host = "localhost";
 
      // 시스템의 속성을 가져옵니다
      Properties properties = System.getProperties();
 
      // 이메일 서버를 설정합니다
      properties.setProperty("mail.smtp.host", host);
 
      // 기본적인 Session 객체를 가져옵니다
      Session session = Session.getDefaultInstance(properties);
      
      // 응답 내용 유형을 설정합니다
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try{
         // 기본적인 MimeMessage 객체를 생성합니다
         MimeMessage message = new MimeMessage(session);
         // 헤더의 From: 헤더 필드를 설정합니다.
         message.setFrom(new InternetAddress(from));
         // 
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // Subject: 헤더 필드를 설정합니다
         message.setSubject("This is the Subject Line!");
         // 이제 실제 메시지를 설정합니다
         message.setText("This is actual message");
         // 메시지를 보냅니다
         Transport.send(message);
         String title = "이메일 전송";
         String res = "메시지가 성공적으로 전송되었습니다...";
         String docType = "<!DOCTYPE html> \n";
         out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor="#f0f0f0">\n" +
         "<h1 align="center">" + title + "</h1>\n" +
         "<p align="center">" + res + "</p>\n" +
         "</body></html>");
      }
         mex.printStackTrace();
      }
   }
}

이제 위의 Servlet을 컴파일하고 web.xml 파일에 다음 항목을 생성해 보겠습니다:

....
 <servlet>
     <servlet-name>SendEmail</servlet-name>
     <servlet-class>SendEmail</servlet-class>
 </servlet>
 
 <servlet-mapping>
     <servlet-name>SendEmail</servlet-name>
     <url-pattern>/SendEmail</url-pattern>
 </servlet-mapping>
....

이제 URL http:을 통해 접근하세요//localhost:8080/SendEmail을 호출하여 이 Servlet을 보내면, 지정된 이메일 ID로 이메일을 보내게 됩니다 [email protected]이를 통해 다음과 같은 응답이 표시됩니다:

이메일 보내기

메시지를 성공적으로 전송했습니다...

여러 수신자에게 이메일을 보내려면 다음 메서드를 사용하여 여러 이메일 ID를 지정하십시오:

void addRecipients(Message.RecipientType type, 
                   Address[] addresses)
throws MessagingException

매개변수에 대한 설명은 다음과 같습니다:

  • type:이는 TO, CC 또는 BCC로 설정됩니다. 여기서 CC는 복사문서, BCC는 숨겨진 복사문서를 의미합니다. 예를 들어 Message.RecipientType.TO

  • addresses:이메일 ID의 배열입니다. 이메일 ID를 지정할 때는 InternetAddress() 메서드를 사용해야 합니다.

HTML 이메일을 보내기

아래의 예제는 사용자 컴퓨터에서 HTML 형식의 이메일을 보내는 것입니다. 여기서는 사용자의로컬 호스트인터넷에 연결되어 있으며 이메일을 보내는 데 지원됩니다. 동시에 Java Email API 패키지와 JAF 패키지의 모든 jar 파일이 CLASSPATH에서 사용 가능하도록 확인하십시오.

이 예제는 이전 예제와 매우 유사하지만, 여기서는 setContent() 메서드를 사용하여 두 번째 매개변수를 "text"로 설정합니다./html"의 내용을 지정하는 매개변수입니다.

이 예제를 사용하여 내용 크기 제한 없는 HTML 내용을 보낼 수 있습니다.

// 파일 이름 SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 받는 사람의 이메일 ID
      String to = "[email protected]";
 
      // 보내는 사람의 이메일 ID
      String from = "[email protected]";
 
      // 당신이 로컬 호스트에서 이메일을 보내는 것을 가정합니다
      String host = "localhost";
 
      // 시스템의 속성을 가져옵니다
      Properties properties = System.getProperties();
 
      // 이메일 서버를 설정합니다
      properties.setProperty("mail.smtp.host", host);
 
      // 기본적인 Session 객체를 가져옵니다
      Session session = Session.getDefaultInstance(properties);
      
      // 응답 내용 유형을 설정합니다
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try{
         // 기본적인 MimeMessage 객체를 생성합니다
         MimeMessage message = new MimeMessage(session);
         // 헤더의 From: 헤더 필드를 설정합니다.
         message.setFrom(new InternetAddress(from));
         // 
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // Subject: 헤더 필드를 설정합니다
         message.setSubject("This is the Subject Line!");
         // 실제 HTML 메시지를 설정합니다. 내용 크기 제한 없음
         message.setContent("<h1>This is actual message</h1>
                            "text/html" );
         // 메시지를 보냅니다
         Transport.send(message);
         String title = "이메일 전송";
         String res = "메시지가 성공적으로 전송되었습니다...";
         String docType = "<!DOCTYPE html> \n";
         out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor="#f0f0f0">\n" +
         "<h1 align="center">" + title + "</h1>\n" +
         "<p align="center">" + res + "</p>\n" +
         "</body></html>");
      }
         mex.printStackTrace();
      }
   }
}

위의 Servlet을 컴파일하고 실행하여 주어진 이메일 ID에 HTML 메시지를 보내십시오.

이메일에 첨부 파일을 보내기

아래의 예제는 당신의 컴퓨터에서 첨부 파일이 포함된 이메일을 보내는 것을 가정합니다.로컬 호스트인터넷에 연결되어 있으며 이메일을 보내는 데 지원됩니다. 동시에 Java Email API 패키지와 JAF 패키지의 모든 jar 파일이 CLASSPATH에서 사용 가능하도록 확인하십시오.

// 파일 이름 SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 받는 사람의 이메일 ID
      String to = "[email protected]";
 
      // 보내는 사람의 이메일 ID
      String from = "[email protected]";
 
      // 당신이 로컬 호스트에서 이메일을 보내는 것을 가정합니다
      String host = "localhost";
 
      // 시스템의 속성을 가져옵니다
      Properties properties = System.getProperties();
 
      // 이메일 서버를 설정합니다
      properties.setProperty("mail.smtp.host", host);
 
      // 기본적인 Session 객체를 가져옵니다
      Session session = Session.getDefaultInstance(properties);
      
      // 응답 내용 유형을 설정합니다
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
       try{
         // 기본적인 MimeMessage 객체를 생성합니다
         MimeMessage message = new MimeMessage(session);
 
         // 헤더의 From: 헤더 필드를 설정합니다.
         message.setFrom(new InternetAddress(from));
 
         // 
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Subject: 헤더 필드를 설정합니다
         message.setSubject("This is the Subject Line!");
 
         // 메시지 부분을 생성합니다 
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // 메시지를 작성합니다
         messageBodyPart.setText("This is message body");
         
         // 다부분 메시지를 생성합니다
         Multipart multipart = new MimeMultipart();
 
         // 텍스트 메시지 부분을 설정합니다
         multipart.addBodyPart(messageBodyPart);
 
         // 두 번째 부분은 첨부 파일입니다
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // 전체 메시지 부분을 보냅니다
         message.setContent(multipart );
 
         // 메시지를 보냅니다
         Transport.send(message);
         String title = "이메일 전송";
         String res = "성공적으로 이메일을 전송했습니다...";
         String docType = "<!DOCTYPE html> \n";
         out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor="#f0f0f0">\n" +
         "<h1 align="center">" + title + "</h1>\n" +
         "<p align="center">" + res + "</p>\n" +
         "</body></html>");
      }
         mex.printStackTrace();
      }
   }
}

위의 Servlet을 컴파일하고 실행하여 주어진 이메일 ID에 파일 첨부된 메시지를 보냅니다.

사용자 인증 부분

이메일 서버에 사용자 ID와 비밀번호를 인증하기 위해 제공하려면 다음과 같은 속성을 설정할 수 있습니다:

 props.setProperty("mail.user", "myuser");
 props.setProperty("mail.password", "mypwd");

이메일 전송 메커니즘의 나머지 부분은 위에서 설명한 것과 일치합니다.