public abstract class Message extends java.lang.Object implements Part
Message implements the Part interface. Message contains a set of attributes and a "content". Messages within a folder also have a set of flags that describe its state within the folder.
Message defines some new attributes in addition to those defined
in the Part
interface. These attributes specify meta-data
for the message - i.e., addressing and descriptive information about
the message.
Message objects are obtained either from a Folder or by constructing a new Message object of the appropriate subclass. Messages that have been received are normally retrieved from a folder named "INBOX".
A Message object obtained from a folder is just a lightweight
reference to the actual message. The Message is 'lazily' filled
up (on demand) when each item is requested from the message. Note
that certain folder implementations may return Message objects that
are pre-filled with certain user-specified items.
To send a message, an appropriate subclass of Message (e.g.,
MimeMessage) is instantiated, the attributes and content are
filled in, and the message is sent using the Transport.send
method.
Modifier and Type | Class and Description |
---|---|
static class |
Message.RecipientType
This inner class defines the types of recipients allowed by
the Message class.
|
Modifier and Type | Field and Description |
---|---|
protected boolean |
expunged
True if this message has been expunged.
|
protected Folder |
folder
The containing folder, if this message is obtained from a folder
|
protected int |
msgnum
The number of this message within its folder, or zero if
the message was not retrieved from a folder.
|
protected Session |
session
The Session object for this Message
|
ATTACHMENT, INLINE
Modifier | Constructor and Description |
---|---|
protected |
Message()
No-arg version of the constructor.
|
protected |
Message(Folder folder,
int msgnum)
Constructor that takes a Folder and a message number.
|
protected |
Message(Session session)
Constructor that takes a Session.
|
Modifier and Type | Method and Description |
---|---|
abstract void |
addFrom(Address[] addresses)
Add these addresses to the existing "From" attribute
|
void |
addRecipient(Message.RecipientType type,
Address address)
Add this recipient address to the existing ones of the given type.
|
abstract void |
addRecipients(Message.RecipientType type,
Address[] addresses)
Add these recipient addresses to the existing ones of the given type.
|
Address[] |
getAllRecipients()
Get all the recipient addresses for the message.
|
abstract Flags |
getFlags()
Returns a
Flags object containing the flags for
this message. |
Folder |
getFolder()
Get the folder from which this message was obtained.
|
abstract Address[] |
getFrom()
Returns the "From" attribute.
|
int |
getMessageNumber()
Get the Message number for this Message.
|
abstract java.util.Date |
getReceivedDate()
Get the date this message was received.
|
abstract Address[] |
getRecipients(Message.RecipientType type)
Get all the recipient addresses of the given type.
|
Address[] |
getReplyTo()
Get the addresses to which replies should be directed.
|
abstract java.util.Date |
getSentDate()
Get the date this message was sent.
|
Session |
getSession()
Return the Session used when this message was created.
|
abstract java.lang.String |
getSubject()
Get the subject of this message.
|
boolean |
isExpunged()
Checks whether this message is expunged.
|
boolean |
isSet(Flags.Flag flag)
Check whether the flag specified in the
flag
argument is set in this message. |
boolean |
match(SearchTerm term)
Apply the specified Search criterion to this message.
|
abstract Message |
reply(boolean replyToAll)
Get a new Message suitable for a reply to this message.
|
abstract void |
saveChanges()
Save any changes made to this message into the message-store
when the containing folder is closed, if the message is contained
in a folder.
|
protected void |
setExpunged(boolean expunged)
Sets the expunged flag for this Message.
|
void |
setFlag(Flags.Flag flag,
boolean set)
Set the specified flag on this message to the specified value.
|
abstract void |
setFlags(Flags flag,
boolean set)
Set the specified flags on this message to the specified value.
|
abstract void |
setFrom()
Set the "From" attribute in this Message.
|
abstract void |
setFrom(Address address)
Set the "From" attribute in this Message.
|
protected void |
setMessageNumber(int msgnum)
Set the Message number for this Message.
|
void |
setRecipient(Message.RecipientType type,
Address address)
Set the recipient address.
|
abstract void |
setRecipients(Message.RecipientType type,
Address[] addresses)
Set the recipient addresses.
|
void |
setReplyTo(Address[] addresses)
Set the addresses to which replies should be directed.
|
abstract void |
setSentDate(java.util.Date date)
Set the sent date of this message.
|
abstract void |
setSubject(java.lang.String subject)
Set the subject of this message.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
addHeader, getAllHeaders, getContent, getContentType, getDataHandler, getDescription, getDisposition, getFileName, getHeader, getInputStream, getLineCount, getMatchingHeaders, getNonMatchingHeaders, getSize, isMimeType, removeHeader, setContent, setContent, setDataHandler, setDescription, setDisposition, setFileName, setHeader, setText, writeTo
protected int msgnum
protected boolean expunged
protected Folder folder
protected Session session
protected Message()
protected Message(Folder folder, int msgnum)
folder
- containing foldermsgnum
- this message's sequence number within this folderprotected Message(Session session)
session
- A Session objectpublic Session getSession()
public abstract Address[] getFrom() throws MessagingException
In certain implementations, this may be different from the entity that actually sent the message.
This method returns null
if this attribute
is not present in this message. Returns an empty array if
this attribute is present, but contains no addresses.
MessagingException
- for failurespublic abstract void setFrom() throws MessagingException
IllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesjava.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failurespublic abstract void setFrom(Address address) throws MessagingException
address
- the senderIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesjava.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failurespublic abstract void addFrom(Address[] addresses) throws MessagingException
addresses
- the sendersIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesjava.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failurespublic abstract Address[] getRecipients(Message.RecipientType type) throws MessagingException
This method returns null
if no recipients of
the given type are present in this message. It may return an
empty array if the header is present, but contains no addresses.
type
- the recipient typeMessagingException
- for failuresMessage.RecipientType.TO
,
Message.RecipientType.CC
,
Message.RecipientType.BCC
public Address[] getAllRecipients() throws MessagingException
getRecipients
method.
This method returns null
if none of the recipient
headers are present in this message. It may Return an empty array
if any recipient header is present, but contains no addresses.
MessagingException
- for failuresMessage.RecipientType.TO
,
Message.RecipientType.CC
,
Message.RecipientType.BCC
,
getRecipients(javax.mail.Message.RecipientType)
public abstract void setRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
type
- the recipient typeaddresses
- the addressesIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesjava.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failurespublic void setRecipient(Message.RecipientType type, Address address) throws MessagingException
The default implementation uses the setRecipients
method.
type
- the recipient typeaddress
- the addressIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesMessagingException
- for other failurespublic abstract void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
type
- the recipient typeaddresses
- the addressesIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesjava.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failurespublic void addRecipient(Message.RecipientType type, Address address) throws MessagingException
The default implementation uses the addRecipients
method.
type
- the recipient typeaddress
- the addressIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesMessagingException
- for other failurespublic Address[] getReplyTo() throws MessagingException
The default implementation simply calls the getFrom
method.
This method returns null
if the corresponding
header is not present. Returns an empty array if the header
is present, but contains no addresses.
MessagingException
- for failuresgetFrom()
public void setReplyTo(Address[] addresses) throws MessagingException
The default implementation provided here just throws the MethodNotSupportedException.
addresses
- addresses to which replies should be directedIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesjava.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MethodNotSupportedException
- if the underlying
implementation does not support setting this
attributeMessagingException
- for other failurespublic abstract java.lang.String getSubject() throws MessagingException
MessagingException
- for failurespublic abstract void setSubject(java.lang.String subject) throws MessagingException
subject
- the subjectIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesjava.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failurespublic abstract java.util.Date getSentDate() throws MessagingException
MessagingException
- for failurespublic abstract void setSentDate(java.util.Date date) throws MessagingException
date
- the sent date of this messageIllegalWriteException
- if the underlying
implementation does not support modification
of existing valuesjava.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failurespublic abstract java.util.Date getReceivedDate() throws MessagingException
MessagingException
- for failurespublic abstract Flags getFlags() throws MessagingException
Flags
object containing the flags for
this message.
Modifying any of the flags in this returned Flags object will
not affect the flags of this message. Use setFlags()
to do that.
MessagingException
- for failuresFlags
,
setFlags(javax.mail.Flags, boolean)
public boolean isSet(Flags.Flag flag) throws MessagingException
flag
argument is set in this message.
The default implementation uses getFlags
.
flag
- the flagMessagingException
- for failuresFlags.Flag
,
Flags.Flag.ANSWERED
,
Flags.Flag.DELETED
,
Flags.Flag.DRAFT
,
Flags.Flag.FLAGGED
,
Flags.Flag.RECENT
,
Flags.Flag.SEEN
public abstract void setFlags(Flags flag, boolean set) throws MessagingException
Flags
object are unaffected.
This will result in a MessageChangedEvent
being
delivered to any MessageChangedListener registered on this
Message's containing folder.
flag
- Flags object containing the flags to be setset
- the value to be setIllegalWriteException
- if the underlying
implementation does not support modification
of existing values.java.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failuresMessageChangedEvent
public void setFlag(Flags.Flag flag, boolean set) throws MessagingException
MessageChangedEvent
being
delivered to any MessageChangedListener registered on this
Message's containing folder.
The default implementation uses the setFlags
method.
flag
- Flags.Flag object containing the flag to be setset
- the value to be setIllegalWriteException
- if the underlying
implementation does not support modification
of existing values.java.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.MessagingException
- for other failuresMessageChangedEvent
public int getMessageNumber()
Valid message numbers start at 1. Messages that do not belong to any folder (like newly composed or derived messages) have 0 as their message number.
protected void setMessageNumber(int msgnum)
msgnum
- the message numberpublic Folder getFolder()
public boolean isExpunged()
getMessageNumber()
are invalid on an expunged
Message object.
Messages that are expunged due to an explict expunge()
request on the containing Folder are removed from the Folder
immediately. Messages that are externally expunged by another source
are marked "expunged" and return true for the isExpunged() method,
but they are not removed from the Folder until an explicit
expunge()
is done on the Folder.
See the description of expunge()
for more details on
expunge handling.
Folder.expunge()
protected void setExpunged(boolean expunged)
expunged
- the expunged flagpublic abstract Message reply(boolean replyToAll) throws MessagingException
If replyToAll
is set, the new Message will be addressed
to all recipients of this message. Otherwise, the reply will be
addressed to only the sender of this message (using the value
of the getReplyTo
method).
The "Subject" field is filled in with the original subject prefixed with "Re:" (unless it already starts with "Re:").
The reply message will use the same session as this message.
replyToAll
- reply should be sent to all recipients
of this messageMessagingException
- for failurespublic abstract void saveChanges() throws MessagingException
Messages obtained from folders opened READ_ONLY should not be modified and saveChanges should not be called on such messages.
java.lang.IllegalStateException
- if this message is
obtained from a READ_ONLY folder.IllegalWriteException
- if the underlying
implementation does not support modification
of existing values.MessagingException
- for other failurespublic boolean match(SearchTerm term) throws MessagingException
term
- the Search criterionMessagingException
- for failuresSearchTerm