- Home ›
- JavaMailでメール送信 ›
- メールの送信 ›
- HERE
Messageクラス
ここでは実際に送信するメールの中身を入れるMessageクラスについて見ていきます。
- java.lang.Object
- javax.mail.Message
- public abstract class Message extends java.lang.Object implements Part
このクラスはabstractクラスですので、そのままインスタンスを作ることはできないのですが、サブクラスとしてMimeMessageクラス用意されています。その為、実際にはMimeMessageを使います。
- java.lang.Object
- javax.mail.Message
- javax.mail.internet.MimeMessage
- public class MimeMessage extends Message implements MimePart
コンストラクタとしては下記の6つが用意されています。
コンストラクタ |
---|
protected MimeMessage(Folder folder, java.io.InputStream is, int msgnum) Constructs a MimeMessage by reading and parsing the data from the specified MIME InputStream. |
protected MimeMessage(Folder folder, int msgnum) Constructs an empty MimeMessage object with the given Folder and message number. |
protected MimeMessage(Folder folder, InternetHeaders headers, byte[] content, int msgnum) Constructs a MimeMessage from the given InternetHeaders object and content. |
MimeMessage(MimeMessage source) Constructs a new MimeMessage with content initialized from the source MimeMessage. |
MimeMessage(Session session) Default constructor. |
MimeMessage(Session session, java.io.InputStream is) Constructs a MimeMessage by reading and parsing the data from the specified MIME InputStream. |
色々ありますが、取りあえず必要なのは5番目のMimeMessage(Session session)になります。
MimeMessage public MimeMessage(Session session)
Default constructor. An empty message object is created. The headers field is set to an empty InternetHeaders object. The flags field is set to an empty Flags object. The modified flag is set to true.
引数に指定されているSessionクラスについては別の頁で説明しますので取りあえず忘れて下さい。
コンストラクタでインスタンスを作成したら必要な情報を入れていきます。その為のメソッドが色々用意されていますので、1つ1つ見ていきましょう。
setFromメソッド
まずsetFromメソッドです。
setFrom public void setFrom(Address address) throws MessagingException
Set the RFC 822 "From" header field. Any existing values are replaced with the given address. If address is null, this header is removed. Parameters: address - the sender of this message Throws: IllegalWriteException - if the underlying implementation does not support modification of existing values IllegalStateException - if this message is obtained from a READ_ONLY folder. MessagingException -
setFromメソッドはヘッダーのFromに表示される値を指定します。(Propertiesでmail.smtp.fromを指定するとenvelope-fromを別に指定できるようですが、指定しなければsetFromで指定したアドレスがenvelop-fromになると思います)。
引数にはAddressクラスのオブジェクトを指定します。Addressクラスについては次の頁で詳しく見ますのでここでは省略しますが、メールアドレスを表わす文字列からJavaMailで利用できる形式に変換してくれるものになります。
setRecipientsメソッド
次にsetRecipientsメソッドです。
setRecipients public void setRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Set the specified recipient type to the given addresses. If the address parameter is null, the corresponding recipient field is removed. Parameters: type - Recipient type addresses - Addresses Throws: IllegalWriteException - if the underlying implementation does not support modification of existing values IllegalStateException - if this message is obtained from a READ_ONLY folder. MessagingException -
setRecipientsメソッドはヘッダーのTo、Cc、Bccに表示される値を指定します。それぞれ別々に指定する必要があり、Message.RecipientTypeの値を使ってどのタイプの値を指定しているかを指定します。typeに指定できる値はMessage.RecipientTypeクラスで定義されています。
static Message.RecipientType BCC static Message.RecipientType CC static Message.RecipientType TO
上記3つの中から指定します。2番目の引数にはsetFromと同じようにAddressクラスの値を指定しますが、Toなどには複数のアドレスを指定できるので、Addressクラスの配列にて指定しています。
setSubjectメソッド
次にsetSubjectメソッドです。このメソッドは文字コード指定するかどうかで2つメソッドがあります。
setSubject public void setSubject(java.lang.String subject) throws MessagingException
Set the "Subject" header field. If the subject contains non US-ASCII characters, it will be encoded using the platform's default charset. If the subject contains only US-ASCII characters, no encoding is done and it is used as-is. If the subject is null, the existing "Subject" field is removed. The application must ensure that the subject does not contain any line breaks. Note that if the charset encoding process fails, a MessagingException is thrown, and an UnsupportedEncodingException is included in the chain of nested exceptions within the MessagingException. Parameters: subject - The subject Throws: IllegalWriteException - if the underlying implementation does not support modification of existing values IllegalStateException - if this message is obtained from a READ_ONLY folder. MessagingException. - An UnsupportedEncodingException may be included in the exception chain if the charset conversion fails.
文字コードを指定する場合は次のメソッドを使います。
setSubject public void setSubject(java.lang.String subject, java.lang.String charset) throws MessagingException
Set the "Subject" header field. If the subject contains non US-ASCII characters, it will be encoded using the specified charset. If the subject contains only US-ASCII characters, no encoding is done and it is used as-is. If the subject is null, the existing "Subject" header field is removed. The application must ensure that the subject does not contain any line breaks. Note that if the charset encoding process fails, a MessagingException is thrown, and an UnsupportedEncodingException is included in the chain of nested exceptions within the MessagingException. Parameters: subject - The subject charset - The charset Throws: IllegalWriteException - if the underlying implementation does not support modification of existing values IllegalStateException - if this message is obtained from a READ_ONLY folder. MessagingException. - An UnsupportedEncodingException may be included in the exception chain if the charset conversion fails.
サブジェクトにUS-ASCIIだけ使う場合には上のメソッドを、それ以外の日本語なども使う場合には下のメソッドを使います。基本的には2番目のメソッドを使っておけばいいかと思います。
1番目の引数にはSubjectに表示したい文字列を指定します。2番目の引数には、メールの場合には必ず"ISO-2022-JP"を指定します。
MimeMessage msg = new MimeMessage(session); msg.setSubject("日本語が入ったサブジェクト", "ISO-2022-JP");
setTextメソッド
次にsetTextメソッドです。このメソッドは文字コード指定するかどうかで2つメソッドがあります。
setText public void setText(java.lang.String text) throws MessagingException
Convenience method that sets the given String as this part's content, with a MIME type of "text/plain". If the string contains non US-ASCII characters. it will be encoded using the platform's default charset. The charset is also used to set the "charset" parameter. Note that there may be a performance penalty if text is large, since this method may have to scan all the characters to determine what charset to use. If the charset is already known, use the setText method that takes the charset parameter.
文字コードを指定する場合は次のメソッドを使います。
setText public void setText(java.lang.String text, java.lang.String charset) throws MessagingException
Convenience method that sets the given String as this part's content, with a MIME type of "text/plain" and the specified charset. The given Unicode string will be charset-encoded using the specified charset. The charset is also used to set the "charset" parameter.
setTextメソッドは本文の内容を指定するのに使います。このメソッドを使った場合は"text/plain"タイプの本文を格納する場合のメソッドです。setSubjectの場合と同じようにUS-ASCII以外の文字を使う場合には2番目の方のメソッドを使います。
1番目の引数には本文に入れたい文字列を、2番目の引数にはメールの場合は必ず"ISO-2022-JP"を指定します。
String msgText = "日本語が含まれたメール本文"; MimeMessage msg = new MimeMessage(session); msg.setText(msgText, "ISO-2022-JP");
setSentDateメソッド
次にsetSentDateメソッドです。
setSentDate public void setSentDate(java.util.Date d) throws MessagingException
Set the RFC 822 "Date" header field. This is the date on which the creator of the message indicates that the message is complete and ready for delivery. If the date parameter is null, the existing "Date" field is removed. Throws: IllegalWriteException - if the underlying implementation does not support modification IllegalStateException - if this message is obtained from a READ_ONLY folder. MessagingException -
setSentDateメソッドは、メールの作成日時を指定します。ただ実際はメール送信日時の時間くらいしか入れれません。引数にはjava.util.Dateの値を入れますので、msg.setSentDate(new Date());のような記載方法になります。
setReplyToメソッド
次にsetReplyToメソッドです。
setReplyTo public void setReplyTo(Address[] addresses) throws MessagingException
Set the RFC 822 "Reply-To" header field. If the address parameter is null, this header is removed. Throws: IllegalWriteException - if the underlying implementation does not support modification of existing values IllegalStateException - if this message is obtained from a READ_ONLY folder. MessagingException -
setReplyToメソッドは、ヘッダーにReplyToを指定するために使います。ReplyToが書かれている場合は、メールを受け取った方が返信する場合などにReplyTo宛てに通常は返すようにされます。
引数にはAddress型の配列の値を指定します。FromやToなどと同じように、メールアドレスを表わす文字列などからAddress型の値を作成して指定します。
setHeaderメソッド
次にsetHeaderメソッドです。
setHeader public void setHeader(java.lang.String name, java.lang.String value) throws MessagingException
Set the value for this header_name. Replaces all existing header values with this new value. Note that RFC 822 headers must contain only US-ASCII characters, so a header that contains non US-ASCII characters must have been encoded by the caller as per the rules of RFC 2047. Parameters: name - header name value - header value Throws: IllegalWriteException - if the underlying implementation does not support modification IllegalStateException - if this message is obtained from a READ_ONLY folder. MessagingException -
setHeaderメソッドは、他にヘッダーに値を設定したい場合に使います。基本的にはUS-ASCIIでしか記載できません。例えばメール送信クライアントソフトを表わすような、"X-Mailer"ヘッダーなどをヘッダーに書きたい時は、引数のnameに"X-Mailer"を、valueに"Java Mail Client"などのように指定します。
実際に試してみると次のようにメールのヘッダに表示されます。
Subject: JavaMail APIs Test MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailer: Java Mail Client
このメソッドは何回使っても構いません。
他にもいくつかメソッドが用意されているのですが、取り合えずここまでにしておきます。
( Written by Tatsuo Ikura )