Mail API를 사용하여 메일 보내기

Java용 Mail 서비스 API는 이메일 메시지 전송에 사용되는 JavaMail(javax.mail) 인터페이스를 지원합니다.

시작하기 전에

발신자의 이메일을 승인된 발신자로 등록합니다. 자세한 내용은 이메일을 보낼 수 있는 사람을 참조하세요.

이메일 메시지 보내기

이메일 메시지를 보내려면 App Engine SDK에 포함된 JavaMail 클래스를 사용합니다.

JavaMail 세션을 만들 때 SMTP 서버 구성을 제공하지 않으면 App Engine이 Mail 서비스를 사용하여 메시지를 전송합니다. 또는 Mailgun, Mailjet, SendGrid 등 지원되는 타사 메일 제공업체에 대한 SMTP 구성을 추가합니다.

메시지를 보내려면 다음 단계를 따르세요.

  1. JavaMail Session 객체를 사용하여 메시지를 만듭니다.

  2. MimeMessage 객체를 만듭니다.

  3. 메시지의 발신자와 수신자를 설정하려면 InternetAddress 클래스를 사용합니다.

    1. MimeMessage 객체의 setFrom() 메서드를 호출하여 발신자를 확인합니다. 선택사항으로 두 번째 매개변수에 개인 이름을 문자열로 제공할 수 있습니다.

    2. 수신자 유형과 주소를 addRecipient() 메서드에 전달하여 수신자를 확인합니다. 수신자 유형은 Message.RecipientType.TO, Message.RecipientType.CC, Message.RecipientType.BCC일 수 있습니다.

    이메일 주소가 잘못되면 InternetAddress 생성자는 AddressException을 발생시킵니다.

  4. '답장받을' 주소를 설정하려면 setReplyTo() 메서드를 사용합니다.

  5. MimeMessage 객체의 메서드를 호출하여 메시지 콘텐츠를 설정합니다. setSubject()로 제목을 설정하고 setText()로 일반 텍스트 본문 콘텐츠를 설정합니다.

  6. 메시지를 보내려면 Transport 클래스의 정적 메서드 send()를 사용합니다.

Mail 서비스를 사용하면 발신 이메일 메시지에 제한된 헤더 집합을 지정할 수 있습니다. 자세한 내용은 사용할 수 있는 선택적 헤더를 참조하세요.

다음 샘플 코드는 메일을 보내는 방법을 보여줍니다.

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

try {
  Message msg = new MimeMessage(session);
  msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
  msg.addRecipient(Message.RecipientType.TO,
                   new InternetAddress("user@example.com", "Mr. User"));
  msg.setSubject("Your Example.com account has been activated");
  msg.setText("This is a test");
  Transport.send(msg);
} catch (AddressException e) {
  // ...
} catch (MessagingException e) {
  // ...
} catch (UnsupportedEncodingException e) {
  // ...
}

Mail 서비스에 대한 호출은 비동기 방식이며 즉시 반환됩니다. Mail 서비스는 수신자의 메일 서버에 연결하고 메시지를 전송하는 프로세스를 관리합니다. 수신자에게 메시지를 보내는 데 문제가 발생하거나 수신자의 메일 서버가 '반송' 메일을 반환하면 발신자에게 오류 메시지가 전달됩니다.

여러 부분으로 구성된 메시지 전송

첨부파일이 있는 메시지 또는 일반 텍스트 메시지 본문과 HTML 메시지 본문이 있는 메시지와 같이 여러 부분으로 구성된 메시지를 보낼 수 있습니다.

여러 부분으로 구성된 메시지를 보내려면 다음 단계를 따르세요.

  1. 여러 부분이 포함된 MimeMultipart 객체를 만든 후 각 첨부파일 또는 대체 메시지 본문의 MimeBodyPart 객체를 만들어 컨테이너에 추가합니다.

  2. MimeMessage의 콘텐츠에 컨테이너를 할당합니다.

다음 샘플 코드는 여러 부분으로 구성된 메시지를 보내는 방법을 보여줍니다.

String htmlBody = "";          // ...
byte[] attachmentData = null;  // ...
Multipart mp = new MimeMultipart();

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
mp.addBodyPart(htmlPart);

MimeBodyPart attachment = new MimeBodyPart();
InputStream attachmentDataStream = new ByteArrayInputStream(attachmentData);
attachment.setFileName("manual.pdf");
attachment.setContent(attachmentDataStream, "application/pdf");
mp.addBodyPart(attachment);

msg.setContent(mp);

보안상의 이유로 메시지 부분과 첨부파일에는 허용된 유형을 사용해야 하며, 첨부파일 이름은 해당 유형으로 인식 가능한 파일 이름 확장자로 끝나야 합니다. 허용된 유형과 파일 이름 확장자 목록을 보려면 첨부파일이 있는 메일을 참조하세요.