Class MimeMessage

  • All Implemented Interfaces:
    MimePart, Part
    Direct Known Subclasses:
    NNTPMessage, gnu.mail.providers.ReadOnlyMessage

    public class MimeMessage
    extends Message
    implements MimePart
    A MIME mail message. This may be a top-level part, or the content of a MIME body part with a "message/rfc822" Content-Type.

    The string representation of RFC822 and MIME header fields must contain only US-ASCII characters. Non US-ASCII characters must be encoded as per the rules in RFC 2047. This class does not enforce those rules; the caller is expected to use MimeUtility to ensure that header values are correctly encoded.

    Version:
    1.4
    Author:
    Chris Burdess
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  MimeMessage.RecipientType
      Additional recipient types specific to internet messages.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected byte[] content
      The bytes of the content of this message, if the message can be stored in memory.
      protected java.io.InputStream contentStream
      A SharedInputStream containing the byte content of this message, if the message cannot be stored in memory.
      protected javax.activation.DataHandler dh
      The data handler managing this message's content.
      protected Flags flags
      The message flags.
      protected InternetHeaders headers
      The message headers.
      protected boolean modified
      Indicates whether the message has been modified.
      protected boolean saved
      Indicates whether we do not need to call saveChanges on the message.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected MimeMessage​(Folder folder, int msgnum)
      Constructor with a parent folder and message number.
      protected MimeMessage​(Folder folder, java.io.InputStream is, int msgnum)
      Constructor with a parent folder, message number, and RFC 822 input stream.
      protected MimeMessage​(Folder folder, InternetHeaders headers, byte[] content, int msgnum)
      Constructor with a parent folder, message number, headers and byte content.
        MimeMessage​(MimeMessage source)
      Constructor with an existing message.
        MimeMessage​(Session session)
      Constructor for an empty message.
        MimeMessage​(Session session, java.io.InputStream is)
      Constructor with an input stream contining an RFC 822 message.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addFrom​(Address[] addresses)
      Adds the specified addresses to From header field.
      void addHeader​(java.lang.String name, java.lang.String value)
      Adds the specified header.
      void addHeaderLine​(java.lang.String line)
      Adds an RFC 822 header-line to this message.
      void addRecipients​(Message.RecipientType type, java.lang.String addresses)
      Adds the given addresses to the recipients of the specified type.
      void addRecipients​(Message.RecipientType type, Address[] addresses)
      Adds the given addresses to the recipients of the specified type.
      protected InternetHeaders createInternetHeaders​(java.io.InputStream is)
      Creates the headers from the given input stream.
      protected MimeMessage createMimeMessage​(Session session)
      Creates a new MIME message.
      java.util.Enumeration getAllHeaderLines()
      Returns all the header-lines.
      java.util.Enumeration getAllHeaders()
      Returns all the headers.
      Address[] getAllRecipients()
      Returns all the recipients.
      java.lang.Object getContent()
      Returns this message's content as a Java object.
      java.lang.String getContentID()
      Returns the value of the Content-ID header field.
      java.lang.String[] getContentLanguage()
      Returns the languages specified in the Content-Language header field of this message, as defined by RFC 1766.
      java.lang.String getContentMD5()
      Returns the value of the Content-MD5 header field.
      protected java.io.InputStream getContentStream()
      Returns the unencoded bytes of the content.
      java.lang.String getContentType()
      Returns the value of the RFC 822 Content-Type header field, or "text/plain" if the header is not available.
      javax.activation.DataHandler getDataHandler()
      Returns a data handler for accessing this message's content.
      java.lang.String getDescription()
      Returns the Content-Description header field of this message.
      java.lang.String getDisposition()
      Returns the value of the RFC 822 Content-Disposition header field, or null if the header is not available.
      java.lang.String getEncoding()
      Returns the value of the Content-Transfer-Encoding header field.
      java.lang.String getFileName()
      Returns the filename associated with this message.
      Flags getFlags()
      Returns the flags for this message.
      Address[] getFrom()
      Returns the value of the RFC 822 From header field.
      java.lang.String[] getHeader​(java.lang.String name)
      Returns all the values for the specified header name.
      java.lang.String getHeader​(java.lang.String name, java.lang.String delimiter)
      Returns all the values for the specified header name as a single string, with headers separated by the given delimiter.
      java.io.InputStream getInputStream()
      Returns a decoded input stream for this message's content.
      int getLineCount()
      Returns the number of lines in the content of this message, or -1 if this number cannot be determined.
      java.util.Enumeration getMatchingHeaderLines​(java.lang.String[] names)
      Returns all the header-lines with any of the given names.
      java.util.Enumeration getMatchingHeaders​(java.lang.String[] names)
      Returns all the headers with any of the given names.
      java.lang.String getMessageID()
      Returns the value of the Message-ID header field.
      java.util.Enumeration getNonMatchingHeaderLines​(java.lang.String[] names)
      Returns all the header-lines without any of the given names.
      java.util.Enumeration getNonMatchingHeaders​(java.lang.String[] names)
      Returns all the headers without any of the given names.
      java.io.InputStream getRawInputStream()
      Returns the unencoded bytes of the content without applying any content transfer encoding.
      java.util.Date getReceivedDate()
      Returns the date on which this message was received.
      Address[] getRecipients​(Message.RecipientType type)
      Returns the recipients of the given type.
      Address[] getReplyTo()
      Returns the value of the RFC 822 Reply-To header field.
      Address getSender()
      Returns the value of the RFC 822 Sender header field.
      java.util.Date getSentDate()
      Returns the value of the RFC 822 Date field.
      int getSize()
      Returns the size of the content of this message in bytes, or -1 if the size cannot be determined.
      java.lang.String getSubject()
      Returns the value of the Subject header field.
      boolean isMimeType​(java.lang.String mimeType)
      Indicates whether this message is of the specified MIME type.
      boolean isSet​(Flags.Flag flag)
      Indicates whether the specified flag is set in this message.
      protected void parse​(java.io.InputStream is)
      Parses the given input stream, setting the headers and content fields appropriately.
      void removeHeader​(java.lang.String name)
      Removes all headers with the specified name.
      Message reply​(boolean replyToAll)
      Returns a new message suitable for a reply to this message.
      void saveChanges()
      Saves any changes to this message.
      void setContent​(java.lang.Object o, java.lang.String type)
      Sets the content of this message using the specified Java object and MIME type.
      void setContent​(Multipart mp)
      Sets the content of this message to be the specified multipart.
      void setContentID​(java.lang.String cid)
      Sets the Content-ID header field of this message.
      void setContentLanguage​(java.lang.String[] languages)
      Sets the Content-Language header of this message.
      void setContentMD5​(java.lang.String md5)
      Sets the Content-MD5 header field of this message.
      void setDataHandler​(javax.activation.DataHandler datahandler)
      Sets the content of this part using the specified data handler.
      void setDescription​(java.lang.String description)
      Sets the Content-Description header field for this message.
      void setDescription​(java.lang.String description, java.lang.String charset)
      Sets the Content-Description header field for this message.
      void setDisposition​(java.lang.String disposition)
      Sets the Content-Disposition header field of this message.
      void setFileName​(java.lang.String filename)
      Sets the filename associated with this part.
      void setFlags​(Flags flag, boolean set)
      Sets the flags for this message.
      void setFrom()
      Sets the RFC 822 From header field using the value of the InternetAddress.getLocalAddress method.
      void setFrom​(Address address)
      Sets the RFC 822 From header field.
      void setHeader​(java.lang.String name, java.lang.String value)
      Sets the specified header.
      void setRecipients​(Message.RecipientType type, java.lang.String addresses)
      Sets the recipients of the given type.
      void setRecipients​(Message.RecipientType type, Address[] addresses)
      Sets the recipients of the given type.
      void setReplyTo​(Address[] addresses)
      Sets the RFC 822 Reply-To header field.
      void setSender​(Address address)
      Sets the RFC 822 Sender header field.
      void setSentDate​(java.util.Date date)
      Sets the RFC 822 Date header field.
      void setSubject​(java.lang.String subject)
      Sets the Subject header field.
      void setSubject​(java.lang.String subject, java.lang.String charset)
      Sets the Subject header field.
      void setText​(java.lang.String text)
      Sets the content of this message using the specified text, and with a MIME type of "text/plain".
      void setText​(java.lang.String text, java.lang.String charset)
      Sets the content of this message using the specified text, and with a MIME type of "text/plain".
      void setText​(java.lang.String text, java.lang.String charset, java.lang.String subtype)
      Sets the content of this message using the specified text, and with a text MIME type of the specified subtype.
      protected void updateHeaders()
      Updates the headers of this part, based on the content.
      protected void updateMessageId()
      Updates the Message-ID header.
      void writeTo​(java.io.OutputStream os)
      Writes this message to the specified stream in RFC 822 format.
      void writeTo​(java.io.OutputStream os, java.lang.String[] ignoreList)
      Writes this message to the specified stream in RFC 822 format, without the specified headers.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • dh

        protected javax.activation.DataHandler dh
        The data handler managing this message's content.
      • content

        protected byte[] content
        The bytes of the content of this message, if the message can be stored in memory.
      • contentStream

        protected java.io.InputStream contentStream
        A SharedInputStream containing the byte content of this message, if the message cannot be stored in memory.
      • flags

        protected Flags flags
        The message flags.
      • modified

        protected boolean modified
        Indicates whether the message has been modified. If false, any data in the content array is assumed to be valid and is used directly in the writeTo method. This field is set to true when an empty message is created or when the saveChanges method is called.
      • saved

        protected boolean saved
        Indicates whether we do not need to call saveChanges on the message. This flag is set to false by the public constructor and set to true by the saveChanges method. The writeTo method checks this flag and calls the saveChanges method as necessary.
    • Constructor Detail

      • MimeMessage

        public MimeMessage​(Session session)
        Constructor for an empty message.
      • MimeMessage

        public MimeMessage​(Session session,
                           java.io.InputStream is)
                    throws MessagingException
        Constructor with an input stream contining an RFC 822 message. When this method returns, the stream will be positioned at the end of the data for the message.
        Parameters:
        session - the session context
        is - the message input stream
        Throws:
        MessagingException
      • MimeMessage

        public MimeMessage​(MimeMessage source)
                    throws MessagingException
        Constructor with an existing message. This performs a deep copy of the target message.
        Parameters:
        source - the message to copy
        Throws:
        MessagingException
      • MimeMessage

        protected MimeMessage​(Folder folder,
                              int msgnum)
        Constructor with a parent folder and message number.
        Parameters:
        folder - the parent folder
        msgnum - the message number
      • MimeMessage

        protected MimeMessage​(Folder folder,
                              java.io.InputStream is,
                              int msgnum)
                       throws MessagingException
        Constructor with a parent folder, message number, and RFC 822 input stream. When this method returns, the stream will be positioned at the end of the data for the message.
        Parameters:
        folder - the parent folder
        is - the message input stream
        msgnum - the message number of this message within the folder
        Throws:
        MessagingException
      • MimeMessage

        protected MimeMessage​(Folder folder,
                              InternetHeaders headers,
                              byte[] content,
                              int msgnum)
                       throws MessagingException
        Constructor with a parent folder, message number, headers and byte content.
        Parameters:
        folder - the parent folder
        headers - the headers
        content - the content byte array
        msgnum - the message number of this message within the folder
        Throws:
        MessagingException
    • Method Detail

      • parse

        protected void parse​(java.io.InputStream is)
                      throws MessagingException
        Parses the given input stream, setting the headers and content fields appropriately. This resets the modified flag.
        Parameters:
        is - the message input stream
        Throws:
        MessagingException
      • setFrom

        public void setFrom​(Address address)
                     throws MessagingException
        Sets the RFC 822 From header field.
        Specified by:
        setFrom in class Message
        Parameters:
        address - the sender of this message
        Throws:
        IllegalWriteException - 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
      • setFrom

        public void setFrom()
                     throws MessagingException
        Sets the RFC 822 From header field using the value of the InternetAddress.getLocalAddress method.
        Specified by:
        setFrom in class Message
        Throws:
        IllegalWriteException - 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
      • addFrom

        public void addFrom​(Address[] addresses)
                     throws MessagingException
        Adds the specified addresses to From header field.
        Specified by:
        addFrom in class Message
        Parameters:
        addresses - the senders of this message
        Throws:
        IllegalWriteException - 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
      • setSender

        public void setSender​(Address address)
                       throws MessagingException
        Sets the RFC 822 Sender header field.
        Parameters:
        address - the sender of this message
        Throws:
        IllegalWriteException - 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
        Since:
        JavaMail 1.3
      • setRecipients

        public void setRecipients​(Message.RecipientType type,
                                  Address[] addresses)
                           throws MessagingException
        Sets the recipients of the given type.
        Specified by:
        setRecipients in class Message
        Parameters:
        type - the recipient type
        addresses - the addresses, or null to remove recipients of this type
        Throws:
        IllegalWriteException - 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
      • setRecipients

        public void setRecipients​(Message.RecipientType type,
                                  java.lang.String addresses)
                           throws MessagingException
        Sets the recipients of the given type.
        Parameters:
        type - the recipient type
        addresses - the addresses, or null to remove recpients of this type
        Throws:
        IllegalWriteException - 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
      • addRecipients

        public void addRecipients​(Message.RecipientType type,
                                  Address[] addresses)
                           throws MessagingException
        Adds the given addresses to the recipients of the specified type.
        Specified by:
        addRecipients in class Message
        Parameters:
        type - the recipient type
        addresses - the addresses
        Throws:
        IllegalWriteException - 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
      • addRecipients

        public void addRecipients​(Message.RecipientType type,
                                  java.lang.String addresses)
                           throws MessagingException
        Adds the given addresses to the recipients of the specified type.
        Parameters:
        type - the recipient type
        addresses - the addresses
        Throws:
        IllegalWriteException - 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
      • setReplyTo

        public void setReplyTo​(Address[] addresses)
                        throws MessagingException
        Sets the RFC 822 Reply-To header field.
        Overrides:
        setReplyTo in class Message
        Parameters:
        addresses - the addresses, or null to remove this header
        Throws:
        IllegalWriteException - 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
      • getSubject

        public java.lang.String getSubject()
                                    throws MessagingException
        Returns the value of the Subject header field.

        If the subject is encoded as per RFC 2047, it is decoded and converted into Unicode.

        Specified by:
        getSubject in class Message
        Throws:
        MessagingException
      • setSubject

        public void setSubject​(java.lang.String subject)
                        throws MessagingException
        Sets the Subject header field.

        If the subject contains non US-ASCII characters, it will be encoded using the platform default charset.

        Specified by:
        setSubject in class Message
        Parameters:
        subject - the subject
        Throws:
        IllegalWriteException - 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
      • setSubject

        public void setSubject​(java.lang.String subject,
                               java.lang.String charset)
                        throws MessagingException
        Sets the Subject header field.

        If the subject contains non US-ASCII characters, it will be encoded using the specified charset.

        Parameters:
        subject - the subject
        charset - the charset used for any encoding
        Throws:
        IllegalWriteException - 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
      • setSentDate

        public void setSentDate​(java.util.Date date)
                         throws MessagingException
        Sets the RFC 822 Date header field.
        Specified by:
        setSentDate in class Message
        Parameters:
        date - the sent date, or null to remove this header
        Throws:
        IllegalWriteException - 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
      • getSize

        public int getSize()
                    throws MessagingException
        Returns the size of the content of this message in bytes, or -1 if the size cannot be determined.

        Note that this number may not be an exact measure, but if not -1, it will be suitable for display to the user.

        Specified by:
        getSize in interface Part
        Throws:
        MessagingException
      • getLineCount

        public int getLineCount()
                         throws MessagingException
        Returns the number of lines in the content of this message, or -1 if this number cannot be determined.

        Note that this number may not be an exact measure, but if not -1, it will be suitable for display to the user.

        Specified by:
        getLineCount in interface Part
        Throws:
        MessagingException
      • setDisposition

        public void setDisposition​(java.lang.String disposition)
                            throws MessagingException
        Sets the Content-Disposition header field of this message.
        Specified by:
        setDisposition in interface Part
        Parameters:
        disposition - the disposition value to set, or null to remove
        Throws:
        IllegalWriteException - 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
        See Also:
        MimeBodyPart.setDisposition(java.lang.String)
      • setContentID

        public void setContentID​(java.lang.String cid)
                          throws MessagingException
        Sets the Content-ID header field of this message.
        Throws:
        IllegalWriteException - 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
      • setDescription

        public void setDescription​(java.lang.String description)
                            throws MessagingException
        Sets the Content-Description header field for this message.

        If the description contains non US-ASCII characters, it will be encoded using the platform default charset.

        Specified by:
        setDescription in interface Part
        Parameters:
        description - the content description
        Throws:
        IllegalWriteException - 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
        See Also:
        MimeBodyPart.setDescription(java.lang.String)
      • setDescription

        public void setDescription​(java.lang.String description,
                                   java.lang.String charset)
                            throws MessagingException
        Sets the Content-Description header field for this message.

        If the description contains non US-ASCII characters, it will be encoded using the specified charset.

        Parameters:
        description - the content description
        charset - the charset used for any encoding
        Throws:
        IllegalWriteException - 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
        See Also:
        MimeBodyPart.setDescription(java.lang.String)
      • getFileName

        public java.lang.String getFileName()
                                     throws MessagingException
        Returns the filename associated with this message.

        This method returns the value of the "filename" parameter from the Content-Disposition header field of this message. If the latter is not available, it returns the value of the "name" parameter from the Content-Type header field.

        Specified by:
        getFileName in interface Part
        Throws:
        MessagingException
        See Also:
        MimeBodyPart.getFileName()
      • setFileName

        public void setFileName​(java.lang.String filename)
                         throws MessagingException
        Sets the filename associated with this part.
        Specified by:
        setFileName in interface Part
        Parameters:
        filename - the filename to associate with this part
        Throws:
        IllegalWriteException - 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
        See Also:
        MimeBodyPart.setFileName(java.lang.String)
      • getContent

        public java.lang.Object getContent()
                                    throws java.io.IOException,
                                           MessagingException
        Returns this message's content as a Java object.
        Specified by:
        getContent in interface Part
        Throws:
        java.io.IOException - if an error occurred in the data handler layer
        MessagingException
      • setDataHandler

        public void setDataHandler​(javax.activation.DataHandler datahandler)
                            throws MessagingException
        Sets the content of this part using the specified data handler.
        Specified by:
        setDataHandler in interface Part
        Parameters:
        datahandler - the data handler for the content
        Throws:
        IllegalWriteException - 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
        See Also:
        MimeBodyPart.setDataHandler(javax.activation.DataHandler)
      • setContent

        public void setContent​(java.lang.Object o,
                               java.lang.String type)
                        throws MessagingException
        Sets the content of this message using the specified Java object and MIME type. Note that a data content handler for the MIME type must be installed and accept objects of the type given.
        Specified by:
        setContent in interface Part
        Parameters:
        o - the content object
        type - the MIME type of the object
        Throws:
        IllegalWriteException - 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
        See Also:
        MimeBodyPart.setContent(java.lang.Object, java.lang.String)
      • setText

        public void setText​(java.lang.String text)
                     throws MessagingException
        Sets the content of this message using the specified text, and with a MIME type of "text/plain".

        If the string contains non US-ASCII characters, it will be encoded using the platform default charset.

        Specified by:
        setText in interface MimePart
        Specified by:
        setText in interface Part
        Parameters:
        text - the text content
        Throws:
        IllegalWriteException - if the underlying implementation does not support modification
        MessagingException
        See Also:
        MimeBodyPart.setText(String)
      • setText

        public void setText​(java.lang.String text,
                            java.lang.String charset)
                     throws MessagingException
        Sets the content of this message using the specified text, and with a MIME type of "text/plain".

        If the string contains non US-ASCII characters, it will be encoded using the specified charset.

        Specified by:
        setText in interface MimePart
        Parameters:
        text - the text content
        charset - the charset used for any encoding
        Throws:
        MessagingException
        See Also:
        MimeBodyPart.setText(String,String)
      • setText

        public void setText​(java.lang.String text,
                            java.lang.String charset,
                            java.lang.String subtype)
                     throws MessagingException
        Sets the content of this message using the specified text, and with a text MIME type of the specified subtype.

        If the string contains non US-ASCII characters, it will be encoded using the specified charset.

        Specified by:
        setText in interface MimePart
        Parameters:
        text - the text content
        charset - the charset used for any encoding
        subtype - the MIME text subtype (e.g. "plain", "html")
        Throws:
        MessagingException
        Since:
        JavaMail 1.4
        See Also:
        MimeBodyPart.setText(String,String,String)
      • setContent

        public void setContent​(Multipart mp)
                        throws MessagingException
        Sets the content of this message to be the specified multipart.
        Specified by:
        setContent in interface Part
        Parameters:
        mp - the multipart content
        Throws:
        IllegalWriteException - 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
        See Also:
        MimeBodyPart.setContent(Multipart)
      • reply

        public Message reply​(boolean replyToAll)
                      throws MessagingException
        Returns a new message suitable for a reply to this message. The new message will have its headers set appropriately for sending, but no content.
        Specified by:
        reply in class Message
        Parameters:
        replyToAll - the reply should be sent to all the recipients of this message
        Throws:
        MessagingException
      • writeTo

        public void writeTo​(java.io.OutputStream os)
                     throws java.io.IOException,
                            MessagingException
        Writes this message to the specified stream in RFC 822 format.
        Specified by:
        writeTo in interface Part
        Throws:
        java.io.IOException - if an error occurs writing to the stream or in the data handler layer
        MessagingException - if an error occurs fetching the data to be written
      • writeTo

        public void writeTo​(java.io.OutputStream os,
                            java.lang.String[] ignoreList)
                     throws java.io.IOException,
                            MessagingException
        Writes this message to the specified stream in RFC 822 format, without the specified headers.
        Throws:
        java.io.IOException - if an error occurs writing to the stream or in the data handler layer
        MessagingException
      • getHeader

        public java.lang.String[] getHeader​(java.lang.String name)
                                     throws MessagingException
        Returns all the values for the specified header name. Note that headers may be encoded as per RFC 2047 if they contain non-US-ASCII characters: these should be decoded.
        Specified by:
        getHeader in interface Part
        Parameters:
        name - the header name
        Throws:
        MessagingException
      • getHeader

        public java.lang.String getHeader​(java.lang.String name,
                                          java.lang.String delimiter)
                                   throws MessagingException
        Returns all the values for the specified header name as a single string, with headers separated by the given delimiter. If the delimiter is null, only the first header is returned.
        Specified by:
        getHeader in interface MimePart
        Parameters:
        name - the header name
        delimiter - the delimiter
        Throws:
        MessagingException
      • setHeader

        public void setHeader​(java.lang.String name,
                              java.lang.String value)
                       throws MessagingException
        Sets the specified header.
        Specified by:
        setHeader in interface Part
        Parameters:
        name - the header name
        value - the header value
        Throws:
        IllegalWriteException - 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
      • addHeader

        public void addHeader​(java.lang.String name,
                              java.lang.String value)
                       throws MessagingException
        Adds the specified header.
        Specified by:
        addHeader in interface Part
        Parameters:
        name - the header name
        value - the header value
        Throws:
        IllegalWriteException - 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
      • removeHeader

        public void removeHeader​(java.lang.String name)
                          throws MessagingException
        Removes all headers with the specified name.
        Specified by:
        removeHeader in interface Part
        Parameters:
        name - the header name
        Throws:
        IllegalWriteException - 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
      • getMatchingHeaders

        public java.util.Enumeration getMatchingHeaders​(java.lang.String[] names)
                                                 throws MessagingException
        Returns all the headers with any of the given names.
        Specified by:
        getMatchingHeaders in interface Part
        Parameters:
        names - the header names to match
        Returns:
        an Enumeration of Header objects
        Throws:
        MessagingException
      • getNonMatchingHeaders

        public java.util.Enumeration getNonMatchingHeaders​(java.lang.String[] names)
                                                    throws MessagingException
        Returns all the headers without any of the given names.
        Specified by:
        getNonMatchingHeaders in interface Part
        Parameters:
        names - the header names to ignore
        Returns:
        an Enumeration of Header objects
        Throws:
        MessagingException
      • addHeaderLine

        public void addHeaderLine​(java.lang.String line)
                           throws MessagingException
        Adds an RFC 822 header-line to this message.
        Specified by:
        addHeaderLine in interface MimePart
        Throws:
        IllegalWriteException - 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
      • setFlags

        public void setFlags​(Flags flag,
                             boolean set)
                      throws MessagingException
        Sets the flags for this message.
        Specified by:
        setFlags in class Message
        Parameters:
        flag - the flags to be set
        set - the value to be set
        Throws:
        IllegalWriteException - 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
      • saveChanges

        public void saveChanges()
                         throws MessagingException
        Saves any changes to this message. Header fields in the message are updated appropriately to be consistent with the message contents.
        Specified by:
        saveChanges in class Message
        Throws:
        IllegalWriteException - 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
      • updateHeaders

        protected void updateHeaders()
                              throws MessagingException
        Updates the headers of this part, based on the content.
        Throws:
        IllegalWriteException - 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
        See Also:
        MimeBodyPart.updateHeaders()
      • createInternetHeaders

        protected InternetHeaders createInternetHeaders​(java.io.InputStream is)
                                                 throws MessagingException
        Creates the headers from the given input stream.
        Parameters:
        is - the input stream to read the headers from
        Throws:
        MessagingException
      • updateMessageId

        protected void updateMessageId()
                                throws MessagingException
        Updates the Message-ID header. This method is called by updateHeaders, and should set the Message-Id header to a suitably unique value if overridden.
        Throws:
        MessagingException
        Since:
        JavaMail 1.4