<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FEmail%2FEmail_Header</id>
		<title>Java/Email/Email Header - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FEmail%2FEmail_Header"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Email/Email_Header&amp;action=history"/>
		<updated>2026-04-21T21:40:20Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Email/Email_Header&amp;diff=6667&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Email/Email_Header&amp;diff=6667&amp;oldid=prev"/>
				<updated>2010-06-01T06:17:06Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:17, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Email/Email_Header&amp;diff=6666&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Email/Email_Header&amp;diff=6666&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Class that implements a Multipart that handles multipart/form-data content type ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/***&lt;br /&gt;
 * jwma Java WebMail&lt;br /&gt;
 * Copyright (c) 2000-2003 jwma team&lt;br /&gt;
 *&lt;br /&gt;
 * jwma is free software; you can distribute and use this source&lt;br /&gt;
 * under the terms of the BSD-style license received along with&lt;br /&gt;
 * the distribution.&lt;br /&gt;
 ***/&lt;br /&gt;
package dtw.webmail.util;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.Hashtable;&lt;br /&gt;
import javax.mail.*;&lt;br /&gt;
import javax.mail.internet.*;&lt;br /&gt;
import javax.activation.*;&lt;br /&gt;
import org.apache.log4j.Logger;&lt;br /&gt;
//import dtw.webmail.JwmaKernel;&lt;br /&gt;
/**&lt;br /&gt;
 * Class that implements a Multipart that handles&lt;br /&gt;
 * the &amp;lt;tt&amp;gt;multipart/form-data&amp;lt;/tt&amp;gt; content type.&lt;br /&gt;
 *&lt;br /&gt;
 * @author Dieter Wimberger&lt;br /&gt;
 * @version 0.9.7 07/02/2003&lt;br /&gt;
 */&lt;br /&gt;
public class FormdataMultipart extends MimeMultipart {&lt;br /&gt;
  //logging&lt;br /&gt;
  private static Logger log = Logger.getLogger(FormdataMultipart.class);&lt;br /&gt;
  //instance attributes&lt;br /&gt;
  private Hashtable m_Params = new Hashtable();&lt;br /&gt;
  private boolean m_Removed = false;&lt;br /&gt;
  /**&lt;br /&gt;
   * Constructs a &amp;lt;tt&amp;gt;FormdataMultipart&amp;lt;/tt&amp;gt; instance.&amp;lt;br&amp;gt;&lt;br /&gt;
   * This implementation just calls the superclass constructor.&lt;br /&gt;
   *&lt;br /&gt;
   * @return the newly created &amp;lt;tt&amp;gt;FormdataMultipart&amp;lt;/tt&amp;gt; instance.&lt;br /&gt;
   */&lt;br /&gt;
  public FormdataMultipart() {&lt;br /&gt;
    super();&lt;br /&gt;
  }//constructor&lt;br /&gt;
  /**&lt;br /&gt;
   * Constructs a &amp;lt;tt&amp;gt;FormdataMultipart&amp;lt;/tt&amp;gt; instance.&amp;lt;br&amp;gt;&lt;br /&gt;
   * Automatically processes the body parts to extract parameters,&lt;br /&gt;
   * and attachments.&lt;br /&gt;
   *&lt;br /&gt;
   * @param DataSource to construct the Multipart from, will be a&lt;br /&gt;
   *        &amp;lt;tt&amp;gt;MultipartInputStream&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   *&lt;br /&gt;
   * @return the newly created &amp;lt;tt&amp;gt;FormdataMultipart&amp;lt;/tt&amp;gt; instance.&lt;br /&gt;
   */&lt;br /&gt;
  public FormdataMultipart(DataSource ds)&lt;br /&gt;
      throws MessagingException, IOException {&lt;br /&gt;
    super(ds);&lt;br /&gt;
    processBodyParts();&lt;br /&gt;
    updateHeaders();&lt;br /&gt;
  }//constructor&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the extracted parameters (with the extrcted values)&lt;br /&gt;
   * as &amp;lt;tt&amp;gt;Hashtable&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   *&lt;br /&gt;
   * @return the extracted parameter data as &amp;lt;tt&amp;gt;Hashtable&amp;lt;/tt&amp;gt;&lt;br /&gt;
   */&lt;br /&gt;
  public Hashtable getParameters() {&lt;br /&gt;
    return m_Params;&lt;br /&gt;
  }//getParameters&lt;br /&gt;
  /**&lt;br /&gt;
   * Processes the body parts of the form-data.&lt;br /&gt;
   * Extracts parameters and set values, and&lt;br /&gt;
   * leaves over the attachments.&lt;br /&gt;
   *&lt;br /&gt;
   * @throws IOException if i/o operations fail.&lt;br /&gt;
   * @throws MessagingException if parsing or part handling with&lt;br /&gt;
   *         Mail API classes fails.&lt;br /&gt;
   */&lt;br /&gt;
  private void processBodyParts()&lt;br /&gt;
      throws IOException, MessagingException {&lt;br /&gt;
    //if write out to log for debug reasons!&lt;br /&gt;
    //ByteArrayOutputStream bout=new ByteArrayOutputStream();&lt;br /&gt;
    //writeTo(bout);&lt;br /&gt;
    //JwmaKernel.getReference().debugLog().write(bout.toString());&lt;br /&gt;
    for (int i = 0; i &amp;lt; getCount(); i++) {&lt;br /&gt;
      MimeBodyPart mbp = (MimeBodyPart) getBodyPart(i);&lt;br /&gt;
      processBodyPart(mbp);&lt;br /&gt;
      if (m_Removed) {&lt;br /&gt;
        m_Removed = false;&lt;br /&gt;
        //decrease index i approbiately&lt;br /&gt;
        i--;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    setSubType(&amp;quot;mixed&amp;quot;);&lt;br /&gt;
    //JwmaKernel.getReference().debugLog().write(&lt;br /&gt;
    //  &amp;quot;Processed multipart/form-data. Attachment parts:&amp;quot;+getCount()&lt;br /&gt;
    //);&lt;br /&gt;
  }//processParts&lt;br /&gt;
  /**&lt;br /&gt;
   * Processes a body part of the form-data.&lt;br /&gt;
   * Extracts parameters and set values, and&lt;br /&gt;
   * leaves over the attachments.&lt;br /&gt;
   *&lt;br /&gt;
   * @param mbp the &amp;lt;tt&amp;gt;MimeBodyPart&amp;lt;/tt&amp;gt; to be processed.&lt;br /&gt;
   *&lt;br /&gt;
   * @throws IOException if i/o operations fail.&lt;br /&gt;
   * @throws MessagingException if parsing or part handling with&lt;br /&gt;
   *         Mail API classes fails.&lt;br /&gt;
   */&lt;br /&gt;
  private void processBodyPart(MimeBodyPart mbp)&lt;br /&gt;
      throws MessagingException, IOException {&lt;br /&gt;
    //String contenttype=new String(mbp.getContentType());&lt;br /&gt;
    //JwmaKernel.getReference().debugLog().write(&amp;quot;Processing &amp;quot;+contenttype);&lt;br /&gt;
    //check if a content-type is given&lt;br /&gt;
    String[] cts = mbp.getHeader(&amp;quot;Content-Type&amp;quot;);&lt;br /&gt;
    if (cts == null || cts.length == 0) {&lt;br /&gt;
      //this is a parameter, get it out and&lt;br /&gt;
      //remove the part.&lt;br /&gt;
      String controlname = extractName(&lt;br /&gt;
          (mbp.getHeader(&amp;quot;Content-Disposition&amp;quot;))[0]);&lt;br /&gt;
      //JwmaKernel.getReference().debugLog().write(&amp;quot;Processing control:&amp;quot;+controlname);&lt;br /&gt;
      //retrieve value observing encoding&lt;br /&gt;
      InputStream in = mbp.getInputStream();&lt;br /&gt;
      String[] encoding = mbp.getHeader(&amp;quot;Content-Transfer-Encoding&amp;quot;);&lt;br /&gt;
      if (encoding != null &amp;amp;&amp;amp; encoding.length &amp;gt; 0) {&lt;br /&gt;
        in = MimeUtility.decode(in, encoding[0]);&lt;br /&gt;
      }&lt;br /&gt;
      String value = extractValue(in);&lt;br /&gt;
      if (value != null || !value.trim().equals(&amp;quot;&amp;quot;)) {&lt;br /&gt;
        addParameter(controlname, value);&lt;br /&gt;
      }&lt;br /&gt;
      //flag removal&lt;br /&gt;
      m_Removed = true;&lt;br /&gt;
      removeBodyPart(mbp);&lt;br /&gt;
    } else {&lt;br /&gt;
      String filename = extractFileName(&lt;br /&gt;
          (mbp.getHeader(&amp;quot;Content-Disposition&amp;quot;))[0]);&lt;br /&gt;
      //normally without file the control should be not successful.&lt;br /&gt;
      //but neither netscape nor mircosoft iexploder care much.&lt;br /&gt;
      //the only feature is an empty filename.&lt;br /&gt;
      if (filename.equals(&amp;quot;&amp;quot;)) {&lt;br /&gt;
        //kick it out too&lt;br /&gt;
        m_Removed = true;&lt;br /&gt;
        removeBodyPart(mbp);&lt;br /&gt;
      } else {&lt;br /&gt;
        //JwmaKernel.getReference().debugLog().write(&amp;quot;Incoming filename=&amp;quot;+filename);&lt;br /&gt;
        //IExploder sends files with complete path.&lt;br /&gt;
        //jwma doesnt want this.&lt;br /&gt;
        int lastindex = filename.lastIndexOf(&amp;quot;\\&amp;quot;);&lt;br /&gt;
        if (lastindex != -1) {&lt;br /&gt;
          filename = filename.substring(lastindex + 1, filename.length());&lt;br /&gt;
        }&lt;br /&gt;
        //JwmaKernel.getReference().debugLog().write(&amp;quot;Outgoing filename=&amp;quot;+filename);&lt;br /&gt;
        //Observe a possible encoding&lt;br /&gt;
        InputStream in = mbp.getInputStream();&lt;br /&gt;
        String[] encoding = mbp.getHeader(&amp;quot;Content-Transfer-Encoding&amp;quot;);&lt;br /&gt;
        if (encoding != null &amp;amp;&amp;amp; encoding.length &amp;gt; 0) {&lt;br /&gt;
          in = MimeUtility.decode(in, encoding[0]);&lt;br /&gt;
        }&lt;br /&gt;
        ByteArrayOutputStream bout = new ByteArrayOutputStream();&lt;br /&gt;
        OutputStream out = (OutputStream) bout;&lt;br /&gt;
        int i = 0;&lt;br /&gt;
        while ((i = in.read()) != -1) {&lt;br /&gt;
          //maybe more efficient in buffers, but well&lt;br /&gt;
          out.write(i);&lt;br /&gt;
        }&lt;br /&gt;
        out.flush();&lt;br /&gt;
        out.close();&lt;br /&gt;
        //create the datasource&lt;br /&gt;
        MimeBodyPartDataSource mbpds =&lt;br /&gt;
            new MimeBodyPartDataSource(&lt;br /&gt;
                //    contenttype,filename,bout.toByteArray()&lt;br /&gt;
                cts[0], filename, bout.toByteArray()&lt;br /&gt;
            );&lt;br /&gt;
&lt;br /&gt;
        //Re-set the Content-Disposition header, in case&lt;br /&gt;
        //the file name was changed&lt;br /&gt;
        mbp.removeHeader(&amp;quot;Content-Disposition&amp;quot;);&lt;br /&gt;
        mbp.addHeader(&lt;br /&gt;
            &amp;quot;Content-Disposition&amp;quot;, &amp;quot;attachment; filename=\&amp;quot;&amp;quot; +&lt;br /&gt;
            filename +&lt;br /&gt;
            &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
        );&lt;br /&gt;
        //set a base64 transferencoding und the data handler&lt;br /&gt;
        mbp.addHeader(&amp;quot;Content-Transfer-Encoding&amp;quot;, &amp;quot;base64&amp;quot;);&lt;br /&gt;
        mbp.setDataHandler(new DataHandler(mbpds));&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }//processBodyPart&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the name of a parameter by extracting it&lt;br /&gt;
   * from the content-disposition header line.&lt;br /&gt;
   *&lt;br /&gt;
   * @param disposition the content-disposition header line as&lt;br /&gt;
   *        &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   *&lt;br /&gt;
   * @return the name of the parameter as &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   *&lt;br /&gt;
   * @throws IOException if the header line is malformed.&lt;br /&gt;
   */&lt;br /&gt;
  private String extractName(String disposition)&lt;br /&gt;
      throws IOException {&lt;br /&gt;
    int end = 0;&lt;br /&gt;
    int start = -1;&lt;br /&gt;
    start = disposition.indexOf(&amp;quot;name=\&amp;quot;&amp;quot;);&lt;br /&gt;
    end = disposition.indexOf(&amp;quot;\&amp;quot;&amp;quot;, start + 7);   //offset is to skip name=\&amp;quot;&lt;br /&gt;
    if (start == -1 || end == -1) {&lt;br /&gt;
      throw new IOException(&amp;quot;Mime header malformed.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    return disposition.substring(start + 6, end);&lt;br /&gt;
  }//extractName&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the filename of an attachment by extracting it&lt;br /&gt;
   * from the content-disposition header line.&lt;br /&gt;
   *&lt;br /&gt;
   * @param disposition the content-disposition header line as&lt;br /&gt;
   *        &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   *&lt;br /&gt;
   * @return the filename of the attachment as &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   *&lt;br /&gt;
   * @throws IOException if the header line is malformed.&lt;br /&gt;
   */&lt;br /&gt;
  private String extractFileName(String disposition)&lt;br /&gt;
      throws IOException {&lt;br /&gt;
    int end = 0;&lt;br /&gt;
    int start = -1;&lt;br /&gt;
    start = disposition.indexOf(&amp;quot;filename=\&amp;quot;&amp;quot;);&lt;br /&gt;
    end = disposition.indexOf(&amp;quot;\&amp;quot;&amp;quot;, start + 10);   //offset is to skip filename=\&amp;quot;&lt;br /&gt;
    if (start == -1 || end == -1) {&lt;br /&gt;
      throw new IOException(&amp;quot;Mime header malformed.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    return disposition.substring(start + 10, end);&lt;br /&gt;
  }//extractFileName&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the value of a parameter by extracting it&lt;br /&gt;
   * from the &amp;lt;tt&amp;gt;InputStream&amp;lt;/tt&amp;gt; that represents the content&lt;br /&gt;
   * of the (parameter) part.&lt;br /&gt;
   *&lt;br /&gt;
   * @param in &amp;lt;tt&amp;gt;InputStream&amp;lt;/tt&amp;gt; that reads from the content&lt;br /&gt;
   *        of the (parameter) part.&lt;br /&gt;
   *&lt;br /&gt;
   * @return the value of the parameter as &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   *&lt;br /&gt;
   * @throws IOException if reading from the stream fails.&lt;br /&gt;
   */&lt;br /&gt;
  private String extractValue(InputStream in)&lt;br /&gt;
      throws IOException {&lt;br /&gt;
    ByteArrayOutputStream out = new ByteArrayOutputStream();&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    while ((i = in.read()) != -1) {&lt;br /&gt;
      out.write(i);&lt;br /&gt;
    }&lt;br /&gt;
    out.flush();&lt;br /&gt;
    out.close();&lt;br /&gt;
    in.close();&lt;br /&gt;
    //JwmaKernel.getReference().debugLog().write(&amp;quot;Retrieved value=&amp;quot;+out.toString());&lt;br /&gt;
    //apply a little bit of magic when returning&lt;br /&gt;
    return out.toString(&amp;quot;iso-8859-1&amp;quot;);&lt;br /&gt;
  }//extractValue&lt;br /&gt;
  /**&lt;br /&gt;
   * Adds a parameter and mapped value to the parameters collection.&lt;br /&gt;
   * If the parameter already exists, it adds another value to&lt;br /&gt;
   * an already existing parameter by extending the array of strings.&lt;br /&gt;
   *&lt;br /&gt;
   * @param name the name of the parameter as &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   * @param value the value of the parameter as &amp;lt;tt&amp;gt;String&amp;lt;/tt&amp;gt;.&lt;br /&gt;
   */&lt;br /&gt;
  private void addParameter(String name, String value) {&lt;br /&gt;
    String values[];&lt;br /&gt;
    //JwmaKernel.getReference().debugLog().write(&amp;quot;Adding &amp;quot;+name+&amp;quot;=&amp;quot;+value);&lt;br /&gt;
    if (m_Params.containsKey(name)) {&lt;br /&gt;
      String oldValues[] = (String[]) m_Params.get(name);&lt;br /&gt;
      values = new String[oldValues.length + 1];&lt;br /&gt;
      for (int i = 0; i &amp;lt; oldValues.length; i++) {&lt;br /&gt;
        values[i] = oldValues[i];&lt;br /&gt;
      }&lt;br /&gt;
      values[oldValues.length] = value;&lt;br /&gt;
    } else {&lt;br /&gt;
      values = new String[1];&lt;br /&gt;
      values[0] = value;&lt;br /&gt;
    }&lt;br /&gt;
    m_Params.put(name, values);&lt;br /&gt;
  }//addParameter&lt;br /&gt;
}//FormdataMultipart&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get Detail Header ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import javax.mail.Authenticator;&lt;br /&gt;
import javax.mail.Folder;&lt;br /&gt;
import javax.mail.Message;&lt;br /&gt;
import javax.mail.PasswordAuthentication;&lt;br /&gt;
import javax.mail.Session;&lt;br /&gt;
import javax.mail.URLName;&lt;br /&gt;
import javax.mail.internet.InternetAddress;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    URLName server = new URLName(&amp;quot;protocol://username@host/foldername&amp;quot;);&lt;br /&gt;
    Session session = Session.getDefaultInstance(new Properties(), new MailAuthenticator());&lt;br /&gt;
    Folder folder = session.getFolder(server);&lt;br /&gt;
    if (folder == null) {&lt;br /&gt;
      System.out.println(&amp;quot;Folder &amp;quot; + server.getFile() + &amp;quot; not found.&amp;quot;);&lt;br /&gt;
      System.exit(1);&lt;br /&gt;
    }&lt;br /&gt;
    folder.open(Folder.READ_ONLY);&lt;br /&gt;
    Message[] messages = folder.getMessages();&lt;br /&gt;
    for (int i = 0; i &amp;lt; messages.length; i++) {&lt;br /&gt;
      System.out.println(&amp;quot;Message &amp;quot; + (i + 1));&lt;br /&gt;
      System.out.println(&amp;quot;From: &amp;quot; + InternetAddress.toString(messages[i].getFrom()));&lt;br /&gt;
      System.out.println(&amp;quot;Reply-to: &amp;quot; + InternetAddress.toString(messages[i].getReplyTo()));&lt;br /&gt;
      String to = InternetAddress.toString(messages[i].getRecipients(Message.RecipientType.TO));&lt;br /&gt;
      System.out.println(&amp;quot;To: &amp;quot; + to);&lt;br /&gt;
      String cc = InternetAddress.toString(messages[i].getRecipients(Message.RecipientType.CC));&lt;br /&gt;
      System.out.println(&amp;quot;Cc: &amp;quot; + cc);&lt;br /&gt;
      String bcc = InternetAddress.toString(messages[i].getRecipients(Message.RecipientType.BCC));&lt;br /&gt;
      System.out.println(&amp;quot;Bcc: &amp;quot; + bcc);&lt;br /&gt;
      System.out.println(&amp;quot;Subject: &amp;quot; + messages[i].getSubject());&lt;br /&gt;
      System.out.println(&amp;quot;Sent: &amp;quot; + messages[i].getSentDate());&lt;br /&gt;
      System.out.println(&amp;quot;Received: &amp;quot; + messages[i].getReceivedDate());&lt;br /&gt;
    }&lt;br /&gt;
    folder.close(false);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MailAuthenticator extends Authenticator {&lt;br /&gt;
  public MailAuthenticator() {&lt;br /&gt;
  }&lt;br /&gt;
  public PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
    return new PasswordAuthentication(&amp;quot;username&amp;quot;, &amp;quot;password&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get Email Header ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import java.util.Enumeration;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import javax.mail.Authenticator;&lt;br /&gt;
import javax.mail.Folder;&lt;br /&gt;
import javax.mail.Header;&lt;br /&gt;
import javax.mail.Message;&lt;br /&gt;
import javax.mail.PasswordAuthentication;&lt;br /&gt;
import javax.mail.Session;&lt;br /&gt;
import javax.mail.URLName;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    URLName server = new URLName(&amp;quot;protocol://username@host/foldername&amp;quot;);&lt;br /&gt;
    Session session = Session.getDefaultInstance(new Properties(), new MailAuthenticator());&lt;br /&gt;
    Folder folder = session.getFolder(server);&lt;br /&gt;
    if (folder != null) {&lt;br /&gt;
      folder.open(Folder.READ_ONLY);&lt;br /&gt;
      Message[] messages = folder.getMessages();&lt;br /&gt;
      for (int i = 0; i &amp;lt; messages.length; i++) {&lt;br /&gt;
        System.out.println((i + 1));&lt;br /&gt;
        Enumeration headers = messages[i].getAllHeaders();&lt;br /&gt;
        while (headers.hasMoreElements()) {&lt;br /&gt;
          Header h = (Header) headers.nextElement();&lt;br /&gt;
          System.out.println(h.getName() + &amp;quot;: &amp;quot; + h.getValue());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      folder.close(false);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MailAuthenticator extends Authenticator {&lt;br /&gt;
  public MailAuthenticator() {&lt;br /&gt;
  }&lt;br /&gt;
  public PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
    return new PasswordAuthentication(&amp;quot;username&amp;quot;, &amp;quot;password&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>