プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

JSPで添付ファイル付きメールを送信する方法!JavaMail APIのサンプルコードを徹底解説

JSPでメール送信機能を実装する際、「テキストだけでなくファイルも添付して送りたい」というニーズはよくあります。本記事では、JavaMail APIを使って、JSPページから添付ファイル付きの電子メールを送信する方法を、実際に動作するサンプルコードとともに分かりやすく解説します。

事前準備:必要なライブラリ

添付ファイル付きメールを送信するには、以下の2つのJARファイルが必要です。あらかじめダウンロードし、アプリケーションの WEB-INF/lib フォルダに配置しておいてください。

  • mail.jar … JavaMail API本体
  • activation.jar … JavaBeans Activation Framework(データハンドリング用)

添付ファイル付きメールを送信するJSPのサンプルコード

以下は、ローカル環境(localhost)のSMTPサーバー経由で、本文と添付ファイルを含むメールを送信するJSPの完全な例です。

<%@ page import = "java.io.*,java.util.*,javax.mail.*"%>
<%@ page import = "javax.mail.internet.*,javax.activation.*"%>
<%@ page import = "javax.servlet.http.*,javax.servlet.*" %>
<%
   String result;

   // 宛先のメールアドレスを指定
   String to = "abcd@gmail.com";

   // 送信元のメールアドレスを指定
   String from = "mcmohd@gmail.com";

   // localhostからメールを送信する前提
   String host = "localhost";

   // システムプロパティを取得
   Properties properties = System.getProperties();

   // メールサーバーを設定
   properties.setProperty("mail.smtp.host", host);

   // デフォルトのSessionオブジェクトを取得
   Session mailSession = Session.getDefaultInstance(properties);

   try {
      // MimeMessageオブジェクトを作成
      MimeMessage message = new MimeMessage(mailSession);

      // Fromヘッダー(送信元)を設定
      message.setFrom(new InternetAddress(from));

      // Toヘッダー(宛先)を設定
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

      // 件名を設定
      message.setSubject("This is the Subject Line!");

      // 本文パートを作成
      BodyPart messageBodyPart = new MimeBodyPart();

      // 本文を設定
      messageBodyPart.setText("This is message body");

      // マルチパートメッセージを作成
      Multipart multipart = new MimeMultipart();

      // 本文パートを追加
      multipart.addBodyPart(messageBodyPart);

      // 第2パート:添付ファイル
      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 = "Send Email";
      result = "Sent message successfully....";
   } catch (MessagingException mex) {
      mex.printStackTrace();
      result = "Error: unable to send message....";
   }
%>
<html>
   <head>
      <title>Send Attachment Email using JSP</title>
   </head>
   <body>
      <center>
         <h1>Send Attachment Email using JSP</h1>
      </center>
      <p align = "center">
         <%out.println("Result: " + result + "\n");%>
      </p>
   </body>
</html>

コードのポイント解説

このサンプルで押さえておきたい重要なポイントは次のとおりです。

  • MimeMessage:送信するメールそのものを表すオブジェクトです。送信元・宛先・件名などを設定します。
  • MimeBodyPart:メールを構成する個々のパート(本文や添付ファイル)を表します。
  • MimeMultipart:複数のパートを1通のメールにまとめるコンテナです。ここでは本文パートと添付パートを追加しています。
  • FileDataSource/DataHandler:添付したいファイル(ここでは file.txt)を読み込み、メールに紐付けます。
  • Transport.send():組み立てたメッセージをSMTPサーバー経由で実際に送信します。

送信処理は try〜catch ブロックで囲まれており、MessagingException が発生した場合にはスタックトレースを出力し、画面にエラーメッセージを表示する仕組みになっています。

実行結果の確認

上記のJSPをデプロイして実行すると、指定した宛先(abcd@gmail.com)に、本文と file.txt が添付されたメールが届きます。ブラウザ上には処理結果として「Sent message successfully....」(送信成功)または「Error: unable to send message....」(送信失敗)が表示されます。

SMTPサーバーの認証が必要な場合

Gmailなどの外部SMTPサーバーを利用する場合、多くはユーザーIDとパスワードによる認証が求められます。その場合は、Session オブジェクトを生成する前に、以下のようにプロパティを追加設定してください。

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

認証の要否や接続ポート番号(587番など)については、利用するメールサーバーの仕様を必ず確認してください。また、実際の運用ではパスワードをソースコードに直接記述せず、設定ファイルや環境変数で管理することをおすすめします。

  1. Google Payで送金する方法|Gmail連携終了後に使えるアプリ・Web版の手順を解説

    電子決済の歴史は、1871年にウエスタンユニオンが送金サービスを開始して以来、大きく進化してきました。現在ではオンライン決済サービスはごく一般的な存在となっています。TransUnionがスポンサーを務め、エコノミスト・インテリジェンス・ユニットが実施した調査によると、企業の倒産リスクを左右する重要な要素の一つとして、消費者がデジタル取引をストレスなく完了できる仕組みを提供しているかどうかが挙げられています。 しかし、テクノロジーの世界では変化が絶えず、アプリも次々と登場しては姿を消していきます。Googleは特に、人気のあったサービスのサポート終了で知られています(RIP、Google R

  2. SendGrid API を使用してメール ニュースレターを送信する方法

    何年もの間、Quincy Larson は、Amazon SES を利用した freeCodeCamp の Mail for Good プラットフォームを通じて、毎週のメールニュースレターを送信しました。 彼は最近、このプロセスを SendGrid に移行しました。この記事では、これを実現するためのツールをどのように構築したかを紹介します。 SendGrid アカウントの設定方法 最初のステップは、SendGrid に登録してアカウントを設定することです。このチュートリアルでは、無料利用枠で十分です。 アプリケーションをスケールアップすると、プラットフォームで利用可能なメールの制限を増