目次へ

2.3. メールにファイルを添付する

前節までの方法では、1つのメールで1種類のデータしか送る事ができませんでした。しかし実際のメーラでは、本文に加えて画像ファイルを送るなど、1つのメールに何種類ものデータを「添付」する事ができます。これは MIME を更に拡張した「MIME マルチパート(MIME Multi-part)」と呼ばれる仕様によって実現されているものです。MIME マルチパートに従ったメールでは、本文が区切り文字によって複数の部分(パート)に分割され、各パートにはそれぞれ他とは独立したデータを格納する事ができます(下図参照)。1つのパートを、別の区切り文字によって更に分割する、MIME マルチパートの入れ子構造も可能です。

MIME マルチパートに従ったメールのイメージ

JavaMail で MIME マルチパートを実現するには、「javax.mail.internet.MimeMultipart」「java.mail.internet.MimeBodyPart」(それぞれ「javax.mail.Multipart」「javax.mail.BodyPart」のサブクラス)を使用します。MimeMultipart は 区切り文字や各パートを管理するクラスで、MimeMessage クラス(や MimeBodyPart クラス)に設定する事により、Mime マルチパートを実現します。MimeBodyPart は、区切り文字で区切られた1つ1つのパートを表すクラスで、内部に送信したいテキストや画像ファイルを設定します。MimeBodyPart に MimeMultipart を設定する事によって、MIME マルチパートの入れ子構造も実現できます。以下は本文に画像ファイルを添付する例です。

MimeMessage mimeMessage=new MimeMessage(session);
...
MimeMultipart multipart=new MimeMultipart();
  
// パート1に本文を設定
MimeBodyPart bodyPart1=new MimeBodyPart();
bodyPart1.setText("このメールには画像ファイルが添付されています。", "iso-2022-jp");
multipart.addBodyPart(bodyPart1);  // マルチパートにパート1を追加
  
// パート2に画像ファイルを設定
MimeBodyPart bodyPart2=new MimeBodyPart();
DataSource dataSource=new FileDataSource("sample.jpeg");
DataHandler dataHandler=new DataHandler(dataSource);
bodyPart2.setDataHandler(dataHandler);
multipart.addBodyPart(bodyPart2);  // マルチパートにパート2を追加
  
// メールにマルチパートを設定
mimeMessage.setContent(multipart);

プログラムの流れを大雑把に説明しますと、引数の無いコンストラクタで MimeMultipart を作成し、MimeBodyPart を「addBodyPart」メソッドで追加、最後に MimeMessage に「setContent」メソッドで設定するという流れになっています。各 MimeBodyPart にデータを設定する方法は、MimeMessage における方法と同じです。テキストの場合は「setText」か「setContent」メソッド、画像ファイルの場合には「setDataHandler」メソッドを使用します。なお MimeMessage や MimeBodyPart に MimeMultipart を設定する場合のメソッドも「setContent」ですが、こちらは引数に「javax.mail.Multipart」を取るものを使用します。

void setContent(javax.mail.Multipart multipart) throws javax.mail.MessagingException

(実習課題3)

以下のコンソールアプリケーションを作成しなさい。

  • 指定したアドレスに対して、画像ファイルを添付して、メールを送信する。
  • 宛先アドレスは1つ目のプログラム引数で指定する。
  • 2つ目以降のプログラム引数で、添付する画像ファイルを指定する。3つ指定された場合には、3つとも添付する事。
  • メールの本文については、コンソールから入力する。引数で指定する形式にはしない。
 

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ