Methods Summary |
---|
private void | addAddressHeader(java.lang.String name, javax.mail.Address[] addresses)
String s = InternetAddress.toString(addresses);
if (s == null)
return;
addHeader(name, s);
|
public void | addFrom(javax.mail.Address[] addresses)Add the specified addresses to the existing "From" field. If
the "From" field does not already exist, it is created.
addAddressHeader("From", addresses);
|
public void | addHeader(java.lang.String name, java.lang.String value)Add this value to the existing values for this header_name.
Note that RFC 822 headers must contain only US-ASCII
characters, so a header that contains non US-ASCII characters
must have been encoded as per the rules of RFC 2047.
headers.addHeader(name, value);
|
public void | addHeaderLine(java.lang.String line)Add a raw RFC 822 header-line.
headers.addHeaderLine(line);
|
public void | addRecipients(javax.mail.Message$RecipientType type, javax.mail.Address[] addresses)Add the given addresses to the specified recipient type.
if (type == RecipientType.NEWSGROUPS) {
String s = NewsAddress.toString(addresses);
if (s != null)
addHeader("Newsgroups", s);
} else
addAddressHeader(getHeaderName(type), addresses);
|
public void | addRecipients(javax.mail.Message$RecipientType type, java.lang.String addresses)Add the given addresses to the specified recipient type.
if (type == RecipientType.NEWSGROUPS) {
if (addresses != null && addresses.length() != 0)
addHeader("Newsgroups", addresses);
} else
addAddressHeader(getHeaderName(type), InternetAddress.parse(addresses));
|
protected javax.mail.internet.InternetHeaders | createInternetHeaders(java.io.InputStream is)Create and return an InternetHeaders object that loads the
headers from the given InputStream. Subclasses can override
this method to return a subclass of InternetHeaders, if
necessary. This implementation simply constructs and returns
an InternetHeaders object.
return new InternetHeaders(is);
|
protected javax.mail.internet.MimeMessage | createMimeMessage(javax.mail.Session session)Create and return a MimeMessage object. The reply method
uses this method to create the MimeMessage object that it
will return. Subclasses can override this method to return
a subclass of MimeMessage. This implementation simply constructs
and returns a MimeMessage object using the supplied Session.
return new MimeMessage(session);
|
private javax.mail.Address[] | eliminateDuplicates(java.util.Vector v, javax.mail.Address[] addrs)Check addrs for any duplicates that may already be in v.
Return a new array without the duplicates. Add any new
addresses to v. Note that the input array may be modified.
if (addrs == null)
return null;
int gone = 0;
for (int i = 0; i < addrs.length; i++) {
boolean found = false;
// search the vector for this address
for (int j = 0; j < v.size(); j++) {
if (((InternetAddress)v.elementAt(j)).equals(addrs[i])) {
// found it; count it and remove it from the input array
found = true;
gone++;
addrs[i] = null;
break;
}
}
if (!found)
v.addElement(addrs[i]); // add new address to vector
}
// if we found any duplicates, squish the array
if (gone != 0) {
Address[] a;
// new array should be same type as original array
// XXX - there must be a better way, perhaps reflection?
if (addrs instanceof InternetAddress[])
a = new InternetAddress[addrs.length - gone];
else
a = new Address[addrs.length - gone];
for (int i = 0, j = 0; i < addrs.length; i++)
if (addrs[i] != null)
a[j++] = addrs[i];
addrs = a;
}
return addrs;
|
private javax.mail.Address[] | getAddressHeader(java.lang.String name)
String s = getHeader(name, ",");
return (s == null) ? null : InternetAddress.parseHeader(s, strict);
|
public java.util.Enumeration | getAllHeaderLines()Get all header lines as an Enumeration of Strings. A Header
line is a raw RFC 822 header-line, containing both the "name"
and "value" field.
return headers.getAllHeaderLines();
|
public java.util.Enumeration | getAllHeaders()Return all the headers from this Message as an enumeration
of Header objects.
Note that certain headers may be encoded as per RFC 2047
if they contain non US-ASCII characters and these should
be decoded.
This implementation obtains the headers from the
headers InternetHeaders object.
return headers.getAllHeaders();
|
public javax.mail.Address[] | getAllRecipients()Get all the recipient addresses for the message.
Extracts the TO, CC, BCC, and NEWSGROUPS recipients.
Address[] all = super.getAllRecipients();
Address[] ng = getRecipients(RecipientType.NEWSGROUPS);
if (ng == null)
return all; // the common case
if (all == null)
return ng; // a rare case
Address[] addresses = new Address[all.length + ng.length];
System.arraycopy(all, 0, addresses, 0, all.length);
System.arraycopy(ng, 0, addresses, all.length, ng.length);
return addresses;
|
public java.lang.Object | getContent()Return the content as a Java object. The type of this
object is dependent on the content itself. For
example, the native format of a "text/plain" content
is usually a String object. The native format for a "multipart"
message is always a Multipart subclass. For content types that are
unknown to the DataHandler system, an input stream is returned
as the content.
This implementation obtains the content from the DataHandler,
that is, it invokes getDataHandler().getContent() .
If the content is a Multipart or Message object and was created by
parsing a stream, the object is cached and returned in subsequent
calls so that modifications to the content will not be lost.
if (cachedContent != null)
return cachedContent;
Object c;
try {
c = getDataHandler().getContent();
} catch (FolderClosedIOException fex) {
throw new FolderClosedException(fex.getFolder(), fex.getMessage());
} catch (MessageRemovedIOException mex) {
throw new MessageRemovedException(mex.getMessage());
}
if (MimeBodyPart.cacheMultipart &&
(c instanceof Multipart || c instanceof Message) &&
(content != null || contentStream != null)) {
cachedContent = c;
}
return c;
|
public java.lang.String | getContentID()Returns the value of the "Content-ID" header field. Returns
null if the field is unavailable or its value is
absent.
This implementation uses the getHeader method
to obtain the requisite header field.
return getHeader("Content-Id", null);
|
public java.lang.String[] | getContentLanguage()Get the languages specified in the "Content-Language" header
field of this message. The Content-Language header is defined by
RFC 1766. Returns null if this field is unavailable
or its value is absent.
This implementation uses the getHeader method
to obtain the requisite header field.
return MimeBodyPart.getContentLanguage(this);
|
public java.lang.String | getContentMD5()Return the value of the "Content-MD5" header field. Returns
null if this field is unavailable or its value
is absent.
This implementation uses the getHeader method
to obtain the requisite header field.
return getHeader("Content-MD5", null);
|
protected java.io.InputStream | getContentStream()Produce the raw bytes of the content. This method is used during
parsing, to create a DataHandler object for the content. Subclasses
that can provide a separate input stream for just the message
content might want to override this method.
This implementation returns a SharedInputStream, if
contentStream is not null. Otherwise, it
returns a ByteArrayInputStream constructed
out of the content byte array.
if (contentStream != null)
return ((SharedInputStream)contentStream).newStream(0, -1);
if (content != null)
return new SharedByteArrayInputStream(content);
throw new MessagingException("No content");
|
public java.lang.String | getContentType()Returns the value of the RFC 822 "Content-Type" header field.
This represents the content-type of the content of this
message. This value must not be null. If this field is
unavailable, "text/plain" should be returned.
This implementation uses the getHeader method
to obtain the requisite header field.
String s = getHeader("Content-Type", null);
if (s == null)
return "text/plain";
return s;
|
public synchronized javax.activation.DataHandler | getDataHandler()Return a DataHandler for this Message's content.
The implementation provided here works as follows. Note the use of
the getContentStream method to
generate the byte stream for the content. Also note that
any transfer-decoding is done automatically within this method.
getDataHandler() {
if (dh == null) {
dh = new DataHandler(new MimePartDataSource(this));
}
return dh;
}
class MimePartDataSource implements DataSource {
public getInputStream() {
return MimeUtility.decode(
getContentStream(), getEncoding());
}
....
}
if (dh == null)
dh = new MimeBodyPart.MimePartDataHandler(
new MimePartDataSource(this));
return dh;
|
public java.lang.String | getDescription()Returns the "Content-Description" header field of this Message.
This typically associates some descriptive information with
this part. Returns null if this field is unavailable or its
value is absent.
If the Content-Description field is encoded as per RFC 2047,
it is decoded and converted into Unicode. If the decoding or
conversion fails, the raw data is returned as-is
This implementation uses the getHeader method
to obtain the requisite header field.
return MimeBodyPart.getDescription(this);
|
public java.lang.String | getDisposition()Returns the value of the "Content-Disposition" header field.
This represents the disposition of this part. The disposition
describes how the part should be presented to the user.
If the Content-Disposition field is unavailable,
null is returned.
This implementation uses the getHeader method
to obtain the requisite header field.
return MimeBodyPart.getDisposition(this);
|
public java.lang.String | getEncoding()Returns the content transfer encoding from the
"Content-Transfer-Encoding" header
field. Returns null if the header is unavailable
or its value is absent.
This implementation uses the getHeader method
to obtain the requisite header field.
return MimeBodyPart.getEncoding(this);
|
public java.lang.String | getFileName()Get the filename associated with this Message.
Returns the value of the "filename" parameter from the
"Content-Disposition" header field of this message. If it's
not available, returns the value of the "name" parameter from
the "Content-Type" header field of this BodyPart.
Returns null if both are absent.
If the mail.mime.encodefilename System property
is set to true, the {@link MimeUtility#decodeText
MimeUtility.decodeText} method will be used to decode the
filename. While such encoding is not supported by the MIME
spec, many mailers use this technique to support non-ASCII
characters in filenames. The default value of this property
is false.
return MimeBodyPart.getFileName(this);
|
public synchronized javax.mail.Flags | getFlags()Return a Flags object containing the flags for
this message.
Note that a clone of the internal Flags object is returned, so
modifying the returned Flags object will not affect the flags
of this message.
return (Flags)flags.clone();
|
public javax.mail.Address[] | getFrom()Returns the value of the RFC 822 "From" header fields. If this
header field is absent, the "Sender" header field is used.
If the "Sender" header field is also absent, null
is returned.
This implementation uses the getHeader method
to obtain the requisite header field.
Address[] a = getAddressHeader("From");
if (a == null)
a = getAddressHeader("Sender");
return a;
|
public java.lang.String[] | getHeader(java.lang.String name)Get all the headers for this header_name. Note that certain
headers may be encoded as per RFC 2047 if they contain
non US-ASCII characters and these should be decoded.
This implementation obtains the headers from the
headers InternetHeaders object.
return headers.getHeader(name);
|
public java.lang.String | getHeader(java.lang.String name, java.lang.String delimiter)Get all the headers for this header name, returned as a single
String, with headers separated by the delimiter. If the
delimiter is null , only the first header is
returned.
return headers.getHeader(name, delimiter);
|
private java.lang.String | getHeaderName(javax.mail.Message$RecipientType type)
String headerName;
if (type == Message.RecipientType.TO)
headerName = "To";
else if (type == Message.RecipientType.CC)
headerName = "Cc";
else if (type == Message.RecipientType.BCC)
headerName = "Bcc";
else if (type == MimeMessage.RecipientType.NEWSGROUPS)
headerName = "Newsgroups";
else
throw new MessagingException("Invalid Recipient Type");
return headerName;
|
public java.io.InputStream | getInputStream()Return a decoded input stream for this Message's "content".
This implementation obtains the input stream from the DataHandler,
that is, it invokes getDataHandler().getInputStream() .
return getDataHandler().getInputStream();
|
public int | getLineCount()Return the number of lines for the content of this message.
Return -1 if this number cannot be determined.
Note that this number may not be an exact measure of the
content length and may or may not account for any transfer
encoding of the content.
This implementation returns -1.
return -1;
|
public java.util.Enumeration | getMatchingHeaderLines(java.lang.String[] names)Get matching header lines as an Enumeration of Strings.
A Header line is a raw RFC 822 header-line, containing both
the "name" and "value" field.
return headers.getMatchingHeaderLines(names);
|
public java.util.Enumeration | getMatchingHeaders(java.lang.String[] names)Return matching headers from this Message as an Enumeration of
Header objects. This implementation obtains the headers from
the headers InternetHeaders object.
return headers.getMatchingHeaders(names);
|
public java.lang.String | getMessageID()Returns the value of the "Message-ID" header field. Returns
null if this field is unavailable or its value is absent.
The default implementation provided here uses the
getHeader method to return the value of the
"Message-ID" field.
return getHeader("Message-ID", null);
|
public java.util.Enumeration | getNonMatchingHeaderLines(java.lang.String[] names)Get non-matching header lines as an Enumeration of Strings.
A Header line is a raw RFC 822 header-line, containing both
the "name" and "value" field.
return headers.getNonMatchingHeaderLines(names);
|
public java.util.Enumeration | getNonMatchingHeaders(java.lang.String[] names)Return non-matching headers from this Message as an
Enumeration of Header objects. This implementation
obtains the header from the headers InternetHeaders object.
return headers.getNonMatchingHeaders(names);
|
public java.io.InputStream | getRawInputStream()Return an InputStream to the raw data with any Content-Transfer-Encoding
intact. This method is useful if the "Content-Transfer-Encoding"
header is incorrect or corrupt, which would prevent the
getInputStream method or getContent method
from returning the correct data. In such a case the application may
use this method and attempt to decode the raw data itself.
This implementation simply calls the getContentStream
method.
return getContentStream();
|
public java.util.Date | getReceivedDate()Returns the Date on this message was received. Returns
null if this date cannot be obtained.
Note that RFC 822 does not define a field for the received
date. Hence only implementations that can provide this date
need return a valid value.
This implementation returns null .
return null;
|
public javax.mail.Address[] | getRecipients(javax.mail.Message$RecipientType type)Returns the recepients specified by the type. The mapping
between the type and the corresponding RFC 822 header is
as follows:
Message.RecipientType.TO "To"
Message.RecipientType.CC "Cc"
Message.RecipientType.BCC "Bcc"
MimeMessage.RecipientType.NEWSGROUPS "Newsgroups"
Returns null if the header specified by the type is not found
or if its value is empty.
This implementation uses the getHeader method
to obtain the requisite header field.
if (type == RecipientType.NEWSGROUPS) {
String s = getHeader("Newsgroups", ",");
return (s == null) ? null : NewsAddress.parse(s);
} else
return getAddressHeader(getHeaderName(type));
|
public javax.mail.Address[] | getReplyTo()Return the value of the RFC 822 "Reply-To" header field. If
this header is unavailable or its value is absent, then
the getFrom method is called and its value is returned.
This implementation uses the getHeader method
to obtain the requisite header field.
Address[] a = getAddressHeader("Reply-To");
if (a == null || a.length == 0)
a = getFrom();
return a;
|
public javax.mail.Address | getSender()Returns the value of the RFC 822 "Sender" header field.
If the "Sender" header field is absent, null
is returned.
This implementation uses the getHeader method
to obtain the requisite header field.
Address[] a = getAddressHeader("Sender");
if (a == null || a.length == 0)
return null;
return a[0]; // there can be only one
|
public java.util.Date | getSentDate()Returns the value of the RFC 822 "Date" field. This is the date
on which this message was sent. Returns null if this field is
unavailable or its value is absent.
This implementation uses the getHeader method
to obtain the requisite header field.
String s = getHeader("Date", null);
if (s != null) {
try {
synchronized (mailDateFormat) {
return mailDateFormat.parse(s);
}
} catch (ParseException pex) {
return null;
}
}
return null;
|
public int | getSize()Return the size of the content of this message in bytes.
Return -1 if the size cannot be determined.
Note that this number may not be an exact measure of the
content size and may or may not account for any transfer
encoding of the content.
This implementation returns the size of the content
array (if not null), or, if contentStream is not
null, and the available method returns a positive
number, it returns that number as the size. Otherwise, it returns
-1.
if (content != null)
return content.length;
if (contentStream != null) {
try {
int size = contentStream.available();
// only believe the size if it's greater than zero, since zero
// is the default returned by the InputStream class itself
if (size > 0)
return size;
} catch (IOException ex) {
// ignore it
}
}
return -1;
|
public java.lang.String | getSubject()Returns the value of the "Subject" header field. Returns null
if the subject field is unavailable or its value is absent.
If the subject is encoded as per RFC 2047, it is decoded and
converted into Unicode. If the decoding or conversion fails, the
raw data is returned as is.
This implementation uses the getHeader method
to obtain the requisite header field.
String rawvalue = getHeader("Subject", null);
if (rawvalue == null)
return null;
try {
return MimeUtility.decodeText(MimeUtility.unfold(rawvalue));
} catch (UnsupportedEncodingException ex) {
return rawvalue;
}
|
private void | initStrict()Set the strict flag based on property.
if (session != null)
strict = PropUtil.getBooleanSessionProperty(session,
"mail.mime.address.strict", true);
|
public boolean | isMimeType(java.lang.String mimeType)Is this Part of the specified MIME type? This method
compares only the primaryType and
subType .
The parameters of the content types are ignored.
For example, this method will return true when
comparing a Part of content type "text/plain"
with "text/plain; charset=foobar".
If the subType of mimeType is the
special character '*', then the subtype is ignored during the
comparison.
return MimeBodyPart.isMimeType(this, mimeType);
|
public synchronized boolean | isSet(javax.mail.Flags$Flag flag)Check whether the flag specified in the flag
argument is set in this message.
This implementation checks this message's internal
flags object.
return (flags.contains(flag));
|
protected void | parse(java.io.InputStream is)Parse the InputStream setting the headers and
content fields appropriately. Also resets the
modified flag.
This method is intended for use by subclasses that need to
control when the InputStream is parsed.
if (!(is instanceof ByteArrayInputStream) &&
!(is instanceof BufferedInputStream) &&
!(is instanceof SharedInputStream))
is = new BufferedInputStream(is);
headers = createInternetHeaders(is);
if (is instanceof SharedInputStream) {
SharedInputStream sis = (SharedInputStream)is;
contentStream = sis.newStream(sis.getPosition(), -1);
} else {
try {
content = ASCIIUtility.getBytes(is);
} catch (IOException ioex) {
throw new MessagingException("IOException", ioex);
}
}
modified = false;
|
public void | removeHeader(java.lang.String name)Remove all headers with this name.
headers.removeHeader(name);
|
public Message | reply(boolean replyToAll)Get a new Message suitable for a reply to this message.
The new Message will have its attributes and headers
set up appropriately. Note that this new message object
will be empty, i.e., it will not have a "content".
These will have to be suitably filled in by the client.
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 "In-Reply-To" header is set in the new message if this
message has a "Message-Id" header. The ANSWERED
flag is set in this message.
The current implementation also sets the "References" header
in the new message to include the contents of the "References"
header (or, if missing, the "In-Reply-To" header) in this message,
plus the contents of the "Message-Id" header of this message,
as described in RFC 2822.
MimeMessage reply = createMimeMessage(session);
/*
* Have to manipulate the raw Subject header so that we don't lose
* any encoding information. This is safe because "Re:" isn't
* internationalized and (generally) isn't encoded. If the entire
* Subject header is encoded, prefixing it with "Re: " still leaves
* a valid and correct encoded header.
*/
String subject = getHeader("Subject", null);
if (subject != null) {
if (!subject.regionMatches(true, 0, "Re: ", 0, 4))
subject = "Re: " + subject;
reply.setHeader("Subject", subject);
}
Address a[] = getReplyTo();
reply.setRecipients(Message.RecipientType.TO, a);
if (replyToAll) {
Vector v = new Vector();
// add my own address to list
InternetAddress me = InternetAddress.getLocalAddress(session);
if (me != null)
v.addElement(me);
// add any alternate names I'm known by
String alternates = null;
if (session != null)
alternates = session.getProperty("mail.alternates");
if (alternates != null)
eliminateDuplicates(v,
InternetAddress.parse(alternates, false));
// should we Cc all other original recipients?
String replyallccStr = null;
boolean replyallcc = false;
if (session != null)
replyallcc = PropUtil.getBooleanSessionProperty(session,
"mail.replyallcc", false);
// add the recipients from the To field so far
eliminateDuplicates(v, a);
a = getRecipients(Message.RecipientType.TO);
a = eliminateDuplicates(v, a);
if (a != null && a.length > 0) {
if (replyallcc)
reply.addRecipients(Message.RecipientType.CC, a);
else
reply.addRecipients(Message.RecipientType.TO, a);
}
a = getRecipients(Message.RecipientType.CC);
a = eliminateDuplicates(v, a);
if (a != null && a.length > 0)
reply.addRecipients(Message.RecipientType.CC, a);
// don't eliminate duplicate newsgroups
a = getRecipients(RecipientType.NEWSGROUPS);
if (a != null && a.length > 0)
reply.setRecipients(RecipientType.NEWSGROUPS, a);
}
String msgId = getHeader("Message-Id", null);
if (msgId != null)
reply.setHeader("In-Reply-To", msgId);
/*
* Set the References header as described in RFC 2822:
*
* The "References:" field will contain the contents of the parent's
* "References:" field (if any) followed by the contents of the parent's
* "Message-ID:" field (if any). If the parent message does not contain
* a "References:" field but does have an "In-Reply-To:" field
* containing a single message identifier, then the "References:" field
* will contain the contents of the parent's "In-Reply-To:" field
* followed by the contents of the parent's "Message-ID:" field (if
* any). If the parent has none of the "References:", "In-Reply-To:",
* or "Message-ID:" fields, then the new message will have no
* "References:" field.
*/
String refs = getHeader("References", " ");
if (refs == null) {
// XXX - should only use if it contains a single message identifier
refs = getHeader("In-Reply-To", " ");
}
if (msgId != null) {
if (refs != null)
refs = MimeUtility.unfold(refs) + " " + msgId;
else
refs = msgId;
}
if (refs != null)
reply.setHeader("References", MimeUtility.fold(12, refs));
try {
setFlags(answeredFlag, true);
} catch (MessagingException mex) {
// ignore it
}
return reply;
|
public void | saveChanges()Updates the appropriate header fields of this message to be
consistent with the message's contents. If this message is
contained in a Folder, any changes made to this message are
committed to the containing folder.
If any part of a message's headers or contents are changed,
saveChanges must be called to ensure that those
changes are permanent. Otherwise, any such modifications may or
may not be saved, depending on the folder implementation.
Messages obtained from folders opened READ_ONLY should not be
modified and saveChanges should not be called on such messages.
This method sets the modified flag to true, the
save flag to true, and then calls the
updateHeaders method.
modified = true;
saved = true;
updateHeaders();
|
private void | setAddressHeader(java.lang.String name, javax.mail.Address[] addresses)
String s = InternetAddress.toString(addresses);
if (s == null)
removeHeader(name);
else
setHeader(name, s);
|
public void | setContent(java.lang.Object o, java.lang.String type)A convenience method for setting this Message's content.
The content is wrapped in a DataHandler object. Note that a
DataContentHandler class for the specified type should be
available to the JavaMail implementation for this to work right.
i.e., to do setContent(foobar, "application/x-foobar") ,
a DataContentHandler for "application/x-foobar" should be installed.
Refer to the Java Activation Framework for more information.
if (o instanceof Multipart)
setContent((Multipart)o);
else
setDataHandler(new DataHandler(o, type));
|
public void | setContent(javax.mail.Multipart mp)This method sets the Message's content to a Multipart object.
setDataHandler(new DataHandler(mp, mp.getContentType()));
mp.setParent(this);
|
public void | setContentID(java.lang.String cid)Set the "Content-ID" header field of this Message.
If the cid parameter is null, any existing
"Content-ID" is removed.
if (cid == null)
removeHeader("Content-ID");
else
setHeader("Content-ID", cid);
|
public void | setContentLanguage(java.lang.String[] languages)Set the "Content-Language" header of this MimePart. The
Content-Language header is defined by RFC 1766.
MimeBodyPart.setContentLanguage(this, languages);
|
public void | setContentMD5(java.lang.String md5)Set the "Content-MD5" header field of this Message.
setHeader("Content-MD5", md5);
|
public synchronized void | setDataHandler(javax.activation.DataHandler dh)This method provides the mechanism to set this part's content.
The given DataHandler object should wrap the actual content.
this.dh = dh;
cachedContent = null;
MimeBodyPart.invalidateContentHeaders(this);
|
public void | setDescription(java.lang.String description)Set the "Content-Description" header field for this Message.
If the description parameter is null , then any
existing "Content-Description" fields are removed.
If the description contains non US-ASCII characters, it will
be encoded using the platform's default charset. If the
description contains only US-ASCII characters, no encoding
is done and it is used as-is.
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.
setDescription(description, null);
|
public void | setDescription(java.lang.String description, java.lang.String charset)Set the "Content-Description" header field for this Message.
If the description parameter is null , then any
existing "Content-Description" fields are removed.
If the description contains non US-ASCII characters, it will
be encoded using the specified charset. If the description
contains only US-ASCII characters, no encoding is done and
it is used as-is.
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.
MimeBodyPart.setDescription(this, description, charset);
|
public void | setDisposition(java.lang.String disposition)Set the "Content-Disposition" header field of this Message.
If disposition is null, any existing "Content-Disposition"
header field is removed.
MimeBodyPart.setDisposition(this, disposition);
|
public void | setFileName(java.lang.String filename)Set the filename associated with this part, if possible.
Sets the "filename" parameter of the "Content-Disposition"
header field of this message.
If the mail.mime.encodefilename System property
is set to true, the {@link MimeUtility#encodeText
MimeUtility.encodeText} method will be used to encode the
filename. While such encoding is not supported by the MIME
spec, many mailers use this technique to support non-ASCII
characters in filenames. The default value of this property
is false.
MimeBodyPart.setFileName(this, filename);
|
public synchronized void | setFlags(javax.mail.Flags flag, boolean set)Set the flags for this message.
This implementation modifies the flags field.
if (set)
flags.add(flag);
else
flags.remove(flag);
|
public void | setFrom(javax.mail.Address address)Set the RFC 822 "From" header field. Any existing values are
replaced with the given address. If address is null ,
this header is removed.
if (address == null)
removeHeader("From");
else
setHeader("From", address.toString());
|
public void | setFrom()Set the RFC 822 "From" header field using the value of the
InternetAddress.getLocalAddress method.
InternetAddress me = InternetAddress.getLocalAddress(session);
if (me != null)
setFrom(me);
else
throw new MessagingException("No From address");
|
public void | setHeader(java.lang.String name, java.lang.String value)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.
headers.setHeader(name, value);
|
public void | setRecipients(javax.mail.Message$RecipientType type, javax.mail.Address[] addresses)Set the specified recipient type to the given addresses.
If the address parameter is null , the corresponding
recipient field is removed.
if (type == RecipientType.NEWSGROUPS) {
if (addresses == null || addresses.length == 0)
removeHeader("Newsgroups");
else
setHeader("Newsgroups", NewsAddress.toString(addresses));
} else
setAddressHeader(getHeaderName(type), addresses);
|
public void | setRecipients(javax.mail.Message$RecipientType type, java.lang.String addresses)Set the specified recipient type to the given addresses.
If the address parameter is null , the corresponding
recipient field is removed.
if (type == RecipientType.NEWSGROUPS) {
if (addresses == null || addresses.length() == 0)
removeHeader("Newsgroups");
else
setHeader("Newsgroups", addresses);
} else
setAddressHeader(getHeaderName(type), InternetAddress.parse(addresses));
|
public void | setReplyTo(javax.mail.Address[] addresses)Set the RFC 822 "Reply-To" header field. If the address
parameter is null , this header is removed.
setAddressHeader("Reply-To", addresses);
|
public void | setSender(javax.mail.Address address)Set the RFC 822 "Sender" header field. Any existing values are
replaced with the given address. If address is null ,
this header is removed.
if (address == null)
removeHeader("Sender");
else
setHeader("Sender", address.toString());
|
public void | setSentDate(java.util.Date d)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.
if (d == null)
removeHeader("Date");
else {
synchronized (mailDateFormat) {
setHeader("Date", mailDateFormat.format(d));
}
}
|
public void | setSubject(java.lang.String subject)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.
setSubject(subject, null);
|
public void | setSubject(java.lang.String subject, java.lang.String charset)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.
if (subject == null) {
removeHeader("Subject");
} else {
try {
setHeader("Subject", MimeUtility.fold(9,
MimeUtility.encodeText(subject, charset, null)));
} catch (UnsupportedEncodingException uex) {
throw new MessagingException("Encoding error", uex);
}
}
|
public void | setText(java.lang.String text)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(text, null);
|
public void | setText(java.lang.String text, java.lang.String charset)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.
MimeBodyPart.setText(this, text, charset, "plain");
|
public void | setText(java.lang.String text, java.lang.String charset, java.lang.String subtype)Convenience method that sets the given String as this part's
content, with a primary MIME type of "text" and the specified
MIME subtype. The given Unicode string will be charset-encoded
using the specified charset. The charset is also used to set
the "charset" parameter.
MimeBodyPart.setText(this, text, charset, subtype);
|
protected void | updateHeaders()Called by the saveChanges method to actually
update the MIME headers. The implementation here sets the
Content-Transfer-Encoding header (if needed
and not already set), the MIME-Version header
and the Message-ID header. Also, if the content
of this message is a MimeMultipart , it's
updateHeaders method is called.
MimeBodyPart.updateHeaders(this);
setHeader("MIME-Version", "1.0");
updateMessageID();
/*
* If we've cached a Multipart or Message object then
* we're now committed to using this instance of the
* object and we discard any stream data used to create
* this object.
*/
if (cachedContent != null) {
dh = new DataHandler(cachedContent, getContentType());
cachedContent = null;
content = null;
if (contentStream != null) {
try {
contentStream.close();
} catch (IOException ioex) { } // nothing to do
}
contentStream = null;
}
|
protected void | updateMessageID()Update the Message-ID header. This method is called
by the updateHeaders and allows a subclass
to override only the algorithm for choosing a Message-ID.
setHeader("Message-ID",
"<" + UniqueValue.getUniqueMessageIDValue(session) + ">");
|
public void | writeTo(java.io.OutputStream os)Output the message as an RFC 822 format stream.
Note that, depending on how the messag was constructed, it may
use a variety of line termination conventions. Generally the
output should be sent through an appropriate FilterOutputStream
that converts the line terminators to the desired form, either
CRLF for MIME compatibility and for use in Internet protocols,
or the local platform's line terminator for storage in a local
text file.
This implementation calls the writeTo(OutputStream,
String[]) method with a null ignore list.
writeTo(os, null);
|
public void | writeTo(java.io.OutputStream os, java.lang.String[] ignoreList)Output the message as an RFC 822 format stream, without
specified headers. If the saved flag is not set,
the saveChanges method is called.
If the modified flag is not
set and the content array is not null, the
content array is written directly, after
writing the appropriate message headers.
if (!saved)
saveChanges();
if (modified) {
MimeBodyPart.writeTo(this, os, ignoreList);
return;
}
// Else, the content is untouched, so we can just output it
// First, write out the header
Enumeration hdrLines = getNonMatchingHeaderLines(ignoreList);
LineOutputStream los = new LineOutputStream(os);
while (hdrLines.hasMoreElements())
los.writeln((String)hdrLines.nextElement());
// The CRLF separator between header and content
los.writeln();
// Finally, the content.
if (content == null) {
// call getContentStream to give subclass a chance to
// provide the data on demand
InputStream is = getContentStream();
// now copy the data to the output stream
byte[] buf = new byte[8192];
int len;
while ((len = is.read(buf)) > 0)
os.write(buf, 0, len);
is.close();
buf = null;
} else {
os.write(content);
}
os.flush();
|