- Home ›
- JavaMailでメール送信 ›
- 添付ファイルの送信 ›
- HERE
MimeMultipart
ここからはメール送信の際に添付ファイルを付けて送信する場合について見ていきます。JavaMailのサンプルプログラムでいうと"(JavaMailをインストールしたディレクトリ)¥demo¥sendfile.java"をベースに見て行きます。
添付ファイルを付けてメールを送信する場合には、メールの本文と添付ファイルを区別する必要がある為、マルチパートという仕組みを使います。これはJavaMailにだけ特化した話ではなく、MIME (Multipurpose Internet Mail Extensions)の仕組みの中で定義されているものです。
マルチパートでは本文や複数の添付ファイルを区切るために"boundary"という区切りの値を使います。JavaMailを使わない場合には自分で"boundary"を設定するのですが、JavaMailではあまり意識することはありません。具体的には大枠となる"MimeMultipart"クラスのオブジェクトを作成し、本文や添付ファイルなどの数だけ"MimeBodyPart"クラスのオブジェクトを作成して"MimeMultipart"クラスのオブジェクトに追加するだけです。
ここでは"MimeMultipart"クラスについてまず見て行きましょう。
MimeMultipartクラス
JavaMailでマルチパートを実現するために"Multipart"クラスが用意されています。まず下記のクラス図を見てください。
- java.lang.Object
- javax.mail.Multipart
- public abstract class Multipart extends java.lang.Object
このクラスはabstractクラスのため、実際にはサブクラスである"MimeMultipart"クラスを使います。
- java.lang.Object
- javax.mail.Multipart
- javax.mail.internet.MimeMultipart
- public class MimeMultipart extends Multipart
コンストラクタは3つ用意されていますが、デフォルトコンストラクタだけ知っていればいいかと思います。
MimeMultipart public MimeMultipart()
Default constructor. An empty MimeMultipart object is created. Its content type is set to "multipart/mixed". A unique boundary string is generated and this string is setup as the "boundary" parameter for the contentType field. MimeBodyParts may be added later.
"MimeMultipart"クラスのオブジェクトを作成してから、その中に収容する本文や添付ファイルなどを表す"MimeBodyPart"クラスのオブジェクト(パートと呼びます)を追加していきます。"MimeBodyPart"クラスについては後ほど見ていきますので、追加方法を先に見ておきましょう。"Multipart"クラスで用意されている"addBodyPart"メソッドを使います。
addBodyPart public void addBodyPart(BodyPart part) throws MessagingException
Adds a Part to the multipart. The BodyPart is appended to the list of existing Parts. Parameters: part - The Part to be appended Throws: MessagingException - IllegalWriteException - if the underlying implementation does not support modification of existing values
このメソッドを使って、必要な数のパート部分を追加していきます。例外を出すので具体的には下記のような書き方をします。
try { MimeBodyPart mbp1 = new MimeBodyPart(); MimeBodyPart mbp2 = new MimeBodyPart(); Multipart mp = new MimeMultipart(); mp.addBodyPart(mbp1); mp.addBodyPart(mbp2); } catch (MessagingException mex) { mex.printStackTrace(); Exception ex = null; if ((ex = mex.getNextException()) != null) { ex.printStackTrace(); } }
では次のページで、パート部分である"MimeBodyPart"クラスについて見て行きます。
( Written by Tatsuo Ikura )