On Fri, 2004-04-30 at 22:47, Min (Frank) Ni wrote:
> It's interesting to hear that, I didn't know either project good enough to be sure 
> if I can combine the functions, but it seems there are things each project can learn 
> from the other. The other thing I wonder is : if I can successfully login to Yahoo 
> Email, would it be easy to go to Yahoo Briefcase or Yahoo Geocities cites without 
> logging in again, just like the browser does ? Some sample program would be nice. 
> Thanks.

If all Yahoo sites support single singon, which appears to be the case,
all you have to do is to keep the session cookie to be able to access
all of them without having to reauthenticate

Oleg




> 
> Frank
> 
> -----Original Message-----
> From: Oleg Kalnichevski [mailto:[EMAIL PROTECTED]
> Sent: Friday, April 30, 2004 4:34 PM
> To: Commons HttpClient Project
> Subject: RE: Yahoo login with Httpclient
> 
> 
> Frank,
> I just got the latest CVS snapshot of MrPostman and it worked. Well, let
> me rephrase: it reported a successful login. I can see what exactly that
> MrPostman does under the hood and try to emulate the login process with
> HttpClient, if you like.
> 
> Another interesting observation: actually CVS HEAD of MrPostman relies
> on HttpClient 2.0 to implement Outlook Webmail support. I just wonder if
> they are migrating from HttpUrlConnection + jCookie combo to HttpClient
> or the other way around. The former is more likely, as the
> OutlookMailSession class appears to be a very recent addition.
> 
> So, you may even consider contributing the code based on HttpClient back
> to the MrPostman project
> 
> Oleg
> 
> 
> 
> On Fri, 2004-04-30 at 19:17, Min (Frank) Ni wrote:
> > Hi Mike, Oleg :
> > 
> > I've been trying different things and it seems "MrPostman" (inside www.sf.net ) 
> > got me a little closer. I can use the following programs and try to log into 
> > Yahoo. Although I still can't see the logged-in page, but if I supply the wrong 
> > Id/password, it will tell me, seems to me it's a step closer than what I can get 
> > by using HttpClient. 
> > 
> > I hope there is something in MrPostman that HttpClient can absorb so that I only 
> > need to use HttpClient alone to login. I hope I just need to supply it with an url 
> > and HttpClient will handle all the troubles for me transparently without me 
> > knowing it (or is it posibble, just like a browser does ?). Thanks.
> > 
> > I am attaching :
> > 
> > Yahoo_Login.java
> > YahooMailSession.java
> > 
> > You still need "MrPostman-1.0.3beta2.jar" from the site : www.sf.net  
> > 
> > I tried to attach them to the email, didn't work.
> > 
> > Please let me know if someone get a break through ^_^
> > 
> > Frank
> > 
> > =============================================================================================================================================================
> > 
> > import java.net.*;
> > import java.io.*;
> > import com.sun.net.ssl.*;
> > import java.security.*;
> > import java.util.*;
> > 
> > public class Yahoo_Login
> > {
> >   YahooMailSession Y_M_S=new YahooMailSession();
> >   
> >   Yahoo_Login()
> >   {
> >     int Result;
> >     
> >     try
> >     {
> >       Result=Y_M_S.login("javamr","javatest", true);
> >       Out("Result="+1);
> >       
> >     } catch(Exception e) { System.out.println(e); }
> >     
> >   }
> >   
> >   public static void Out(String message) { System.out.println(message); }
> > 
> >   public static void main(String[] args)
> >   {
> >     Yahoo_Login Y_L=new Yahoo_Login();
> >     
> >   }
> > }
> > 
> > =============================================================================================================================================================
> > 
> > /*
> >  * -*- mode: java; c-basic-indent: 4; indent-tabs-mode: nil -*-
> >  * 
> > :indentSize=4:noTabs=true:tabSize=4:indentOnTab=true:indentOnEnter=true:mode=java:
> >  * ex: set tabstop=4 expandtab:
> >  *
> >  * MrPostman - webmail <-> email gateway
> >  * Copyright (C) 2002-2003 MrPostman Development Group
> >  * Projectpage: http://mrbook.org/mrpostman/
> >  *
> >  *
> >  * This program is free software; you can redistribute it and/or modify
> >  * it under the terms of the GNU General Public License as published by
> >  * the Free Software Foundation; either version 2 of the License, or
> >  * (at your option) any later version.
> >  *
> >  * This program is distributed in the hope that it will be useful,
> >  * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >  * GNU General Public License for more details.
> >  * In particular, this implies that users are responsible for
> >  * using MrPostman after reading the terms and conditions given
> >  * by their web-mail provider.
> >  *
> >  * You should have received a copy of the GNU General Public License
> >  * Named LICENSE in the base directory of this distribution,
> >  * if not, write to the Free Software
> >  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> >  */
> > 
> > //package org.mrbook.mrpostman.yahoo;
> > 
> > import com.sonalb.net.http.HTTPRedirectHandler;
> > import com.sonalb.net.http.cookie.CookieJar;
> > 
> > import org.mrbook.mrpostman.MailSessionException;
> > import org.mrbook.mrpostman.ModuleInfo;
> > import org.mrbook.mrpostman.ModuleOption;
> > import org.mrbook.mrpostman.WebMailSession;
> > 
> > import java.io.BufferedReader;
> > import java.io.InputStreamReader;
> > import java.io.PrintWriter;
> > 
> > import java.net.HttpURLConnection;
> > import java.net.URL;
> > import java.net.URLEncoder;
> > 
> > import java.util.Iterator;
> > import java.util.Vector;
> > import java.util.logging.Level;
> > import java.util.logging.Logger;
> > import java.util.regex.Matcher;
> > import java.util.regex.Pattern;
> > 
> > 
> > public class YahooMailSession extends WebMailSession
> > {
> >   public static final String CVSID = "$Id: YahooMailSession.java,v 1.22 2004/02/20 
> > 20:09:42 chris_humphreys Exp $";
> >   
> >   /**
> >    * Our hardcoded ModuleInfo data.
> >    */
> >   private static final String[] AUTHORS = {"Hector Urtubia <[EMAIL PROTECTED]>"};
> >   private static final ModuleOption[] OPTIONS =
> >   {
> >     new ModuleOption("yahoo.https", "true"),
> >     new ModuleOption("yahoo.emptyTrash", "false"),
> >     new ModuleOption("yahoo.unreadAfterTop", "false")
> >   };
> >   private static final ModuleInfo MODULE_INFO = new ModuleInfo("yahoo", AUTHORS, 
> > "0.7",
> >   "http://mrpostman.sourceforge.net/updates/yahoo";, "/en/yahoo/index.html", 
> > OPTIONS);
> >   private static Logger logger = 
> > Logger.getLogger("org.mrbook.mrpostman.yahoo.YahooMailSession");
> >   private static String httpsLoginURL = "https://login.yahoo.com/config/login";;
> >   private static String httpLoginURL = "http://login.yahoo.com/config/login";;
> >   private static String UserAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US; 
> > rv:0.9.4) Gecko/20010914";
> >   private String crumb = null;
> >   private String baseUrl = null;
> >   private Vector messageIDS = null;
> >   private Vector filtereMessageIDS = null;
> >   private boolean gotNumMessages = false;
> >   private boolean useHttps = true;
> >   private boolean emptyTrash = false; //empty trash after collection option - CH 
> > 3/10/03
> >   private boolean leaveUnreadAfterTOP = false; //mark msg as unread after TOP 
> > command - CH 10/12/03
> >   private String trashEmptyUrl = null;
> >   
> >   //    private Map cookieJar=null;
> >   private CookieJar cj = null;
> >   private boolean authenticated = false;
> >   private int unread_messages = 0;
> >   private int number_messages = 0;
> >   private int limit_number_messages = 350;
> >   
> >   public int login(String username, String password, boolean secureLogin)
> >   {
> >     String username2 = username.replaceAll("@.+\\Z", "");
> >     logger.fine("The username will be : " + username2);
> >     cj = new CookieJar();
> >     /* we have to construct the POST request */
> >     String postRequest = createPostRequest(username2, password);
> >     logger.fine(postRequest);
> >     
> >     try
> >     {
> >       URL url = null;
> >       HttpURLConnection conn = null;
> >       if (useHttps)
> >       {
> >         logger.info("Log-in using https");
> >         url = new URL(httpsLoginURL + "?" + postRequest);
> >         conn = (HttpURLConnection) url.openConnection();
> >       } 
> >       else
> >       {
> >         logger.info("Log-in using http");
> >         url = new URL(httpLoginURL + "?" + postRequest);
> >         conn = (HttpURLConnection) url.openConnection();
> >       }
> >       
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Conten-type", "application/x-www-form-urlencoded");
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       
> >       HTTPRedirectHandler hrh = new HTTPRedirectHandler(conn);
> >       hrh.connect();
> >       
> >       conn = (HttpURLConnection) hrh.getConnection();  //this could be either 
> > HttpURLConnection or HttpsURLConnection
> >       cj.addAll(hrh.getCookieJar());
> >       
> >       BufferedReader rd = new BufferedReader(new 
> > InputStreamReader(conn.getInputStream()));
> >       String line;
> >       Pattern invalidPassword = Pattern.compile("Invalid Password", 
> > Pattern.CASE_INSENSITIVE);
> >       Pattern invalidID = Pattern.compile("does not exist", 
> > Pattern.CASE_INSENSITIVE);
> >       Pattern unreadMessagesPattern = Pattern.compile("Inbox\\s\\(([0-9]+)\\)");
> >       Pattern unreadMessagesPatternOld = Pattern.compile("Inbox\\s\\(([0-9]+)\\)");
> >       
> >       Matcher unreadMessagesMatcher = null;
> >       
> >       String Result_Str="";
> >       
> >       while ((line = rd.readLine()) != null)
> >       {
> >         Result_Str+=line+"\n";
> > //        logger.finest("html: " + line);
> >         logger.info("html: " + line);
> >         String line2 = new String(line);
> >         
> >         if (invalidID.matcher(line).find())
> >         {
> >           logger.warning("ID does not exist");
> >           return WebMailSession.WMS_LOGIN_FAILED;
> >         }
> >         
> >         if (invalidPassword.matcher(line2).find())
> >         {
> >           logger.warning("Invalid Password");
> >           return WebMailSession.WMS_LOGIN_FAILED;
> >         }
> >         
> >         unreadMessagesMatcher = unreadMessagesPattern.matcher(line2);
> >         
> >         if (unreadMessagesMatcher.find())
> >         {
> >           unread_messages = (new 
> > Integer(unreadMessagesMatcher.group(1))).intValue();
> >           logger.info("You have " + unread_messages + " unread messages");
> >         }
> >         
> >       }
> >       rd.close();
> >       baseUrl = getBaseURL(conn.getURL());
> >       
> >       System.out.println("baseUrl="+baseUrl);
> > 
> > //      NM_Lib.Display_HTML_In_Browser(Result_Str);
> >       
> >       logger.fine("url: " + baseUrl.toString());
> >     } 
> >     catch (Exception e)
> >     {
> >       logger.log(Level.SEVERE, "should not happen", e);
> >       return WebMailSession.WMS_LOGIN_FAILED;
> >     }
> >     authenticated = true;
> >     return WebMailSession.WMS_LOGIN_OK;
> >   }
> >   
> >   private String getBaseURL(URL url)
> >   {
> >     Pattern pat = null;
> >     if (useHttps) { pat = Pattern.compile("(http%3a\\/\\/.*?)(\\/)"); } 
> >     else { pat = Pattern.compile("(http:\\/\\/.*?)(\\/)"); }
> >     logger.fine("url: " + url.toString());
> >     Matcher matcher = pat.matcher(url.toString());
> >     matcher.reset(url.toString());
> >     
> >     if (!matcher.find()) { logger.warning("Invalid URL\n"); }
> >     
> >     if (useHttps) { return matcher.group(1).replaceAll("%3a", ":"); } 
> >     else { return matcher.group(1); }
> >   }
> >   
> >   private String createPostRequest(String username, String password)
> >   {
> >     String line = null;
> >     
> >     try
> >     {
> >       line = URLEncoder.encode(".tries", "UTF-8") + "=" + URLEncoder.encode("1", 
> > "UTF-8") + "&";
> >       // line+= URLEncoder.encode(".done","UTF-8") + "=" + URLEncoder.encode("URL 
> > to go later","UTF-8");
> >       line += (URLEncoder.encode(".src", "UTF-8") + "=" + URLEncoder.encode("ym", 
> > "UTF-8") + "&");
> >       line += (URLEncoder.encode(".us", "UTF-8") + "=" + URLEncoder.encode("ym", 
> > "UTF-8") + "&");
> >       line += (URLEncoder.encode(".intl", "UTF-8") + "=" + URLEncoder.encode("us", 
> > "UTF-8") + "&");
> >       line += (URLEncoder.encode("login", "UTF-8") + "=" + 
> > URLEncoder.encode(username, "UTF-8") + "&");
> >       line += (URLEncoder.encode("passwd", "UTF-8") + "=" + 
> > URLEncoder.encode(password, "UTF-8"));
> >     } catch (Exception e)
> >     {
> >       logger.log(Level.SEVERE, "should not happen", e);
> >     }
> >     return line;
> >   }
> >   
> >   public int numMessages()
> >   {
> >     if (gotNumMessages)
> >     {
> >       logger.finest("numMessages() - " + filtereMessageIDS.size());
> >       return filtereMessageIDS.size();
> >     }
> >     int start_message = 0;
> >     int end_message = 0;
> >     int message_index = 0;
> >     int inbox_index = 0;
> >     String inboxPath = "/ym/ShowFolder?box=Inbox&Npos=";
> >     
> >     if (!authenticated)
> >     {
> >       return -1;
> >     }
> >     
> >     try
> >     {
> >       URL url = new URL(baseUrl + inboxPath + "0");
> >       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       // 
> > conn.setRequestProperty("Content-type","application/x-www-form-urlencoded");
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       HTTPRedirectHandler hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       BufferedReader br = new BufferedReader(new 
> > InputStreamReader(conn.getInputStream()));
> >       String line;
> >       Pattern messageRangePattern = Pattern.compile("Messages (\\d+)-(\\d+) of 
> > (\\d+)");
> >       Pattern messageRangePatternOld = Pattern.compile("showing (\\d+)-(\\d+) of 
> > (\\d+)");
> >       Pattern noMessagesPattern = 
> > Pattern.compile("This\\s*folder\\s*has\\s*no\\s*messages");
> >       Pattern noMessagesPatternOld = 
> > Pattern.compile("Folder\\s*Inbox\\s*has\\s*no\\s+");
> >       //Added Trash Empty link pattern - CH 3/10/03
> >       Pattern trashPattern = Pattern.compile("<a href=\"(\\S+)\">Trash</a>");
> >       Pattern trashEmptyPattern = Pattern.compile("<a href=\"(\\S+)\">Empty</a>");
> >       
> >       Matcher matcher = null;
> >       
> >       while ((line = br.readLine()) != null)
> >       {
> >         logger.finest("html: " + line);
> >         matcher = messageRangePattern.matcher(line);
> >         
> >         if (matcher.find())
> >         {
> >           start_message = (new Integer(matcher.group(1))).intValue();
> >           end_message = (new Integer(matcher.group(2))).intValue();
> >           number_messages = (new Integer(matcher.group(3))).intValue();
> >           logger.info("start/end/number of msgs: " + start_message + " " + 
> > end_message + " "
> >           + number_messages);
> >         }
> >         matcher = messageRangePatternOld.matcher(line);
> >         
> >         if (matcher.find())
> >         {
> >           start_message = (new Integer(matcher.group(1))).intValue();
> >           end_message = (new Integer(matcher.group(2))).intValue();
> >           number_messages = (new Integer(matcher.group(3))).intValue();
> >           logger.info("start/end/number of msgs: " + start_message + " " + 
> > end_message + " "
> >           + number_messages);
> >         }
> >         matcher = noMessagesPattern.matcher(line);
> >         
> >         if (matcher.find())
> >         {
> >           number_messages = 0;
> >           logger.info("No messages");
> >           return 0;
> >         }
> >         matcher = noMessagesPattern.matcher(line);
> >         
> >         if (matcher.find())
> >         {
> >           number_messages = 0;
> >           logger.info("No messages");
> >           return 0;
> >         }
> >         
> >         //check for empty trash link - CH 03/10/03
> >         //leave this at the end of the loop
> >         matcher = trashPattern.matcher(line);
> >         if (matcher.find())
> >         {
> >           logger.fine("Found Trash folder link, checking for empty url...");
> >           
> >           //it could be on this line or the next line...
> >           matcher = trashEmptyPattern.matcher(line);
> >           if (!matcher.find())
> >           {
> >             line = br.readLine();
> >             logger.finest("html: " + line);
> >             if (line != null)
> >             {
> >               matcher = trashEmptyPattern.matcher(line);
> >             }
> >           }
> >           if (matcher.find())
> >           {
> >             trashEmptyUrl = matcher.group(1);
> >             logger.fine("Found Trash Empty URL: " + trashEmptyUrl);
> >           }
> >         }
> >         
> >       }
> >       
> >       // Now that we know the total number of messages, parse the message
> >       // ID's
> >       if (messageIDS == null)
> >       {
> >         messageIDS = new Vector();
> >       }
> >       
> >       while ((message_index < number_messages) && (message_index < 
> > limit_number_messages))
> >       {
> >         url = new URL(baseUrl + inboxPath + inbox_index);
> >         conn = (HttpURLConnection) url.openConnection();
> >         conn.setRequestProperty("User-Agent", UserAgent);
> >         conn.setRequestProperty("Accept", "*/*");
> >         conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >         conn.setInstanceFollowRedirects(false);
> >         hrh = new HTTPRedirectHandler(conn);
> >         hrh.setCookieJar(cj);
> >         hrh.connect();
> >         cj.addAll(hrh.getCookieJar());
> >         br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
> >         Pattern msgidPattern = Pattern.compile("ShowLetter\\?MsgId=([0-9_\\-]+)");
> >         Pattern flaggedPattern = Pattern.compile("flag\\.gif");
> >         Pattern unreadPattern = Pattern.compile("\\<b\\>");
> >         Pattern sizePattern = 
> > Pattern.compile("(\\<b\\>|\\A\\s+|\\A)([0-9]+)(b|k)");
> >         Pattern attchPattern = Pattern.compile("\\#attachments");
> >         Pattern crumbPattern = Pattern.compile("name=\".crumb\" value=\"(.*?)\"");
> >         Matcher crumbMatcher = null;
> >         Matcher attchMatcher = null;
> >         boolean flagged = false;
> >         boolean have_size = false;
> >         boolean have_msgid = false;
> >         MailIdentifier mi = new MailIdentifier();
> >         
> >         while ((line = br.readLine()) != null)
> >         {
> >           crumbMatcher = crumbPattern.matcher(line);
> >           if (crumbMatcher.find())
> >           {
> >             crumb = crumbMatcher.group(1);
> >             logger.info("Found crumb = " + crumb);
> >           }
> >           
> >           matcher = msgidPattern.matcher(line);
> >           
> >           if (matcher.find())
> >           {
> >             if (!foundID(matcher.group(1)))
> >             {
> >               logger.warning("Found a new message id: " + matcher.group(1));
> >               attchMatcher = attchPattern.matcher(line);
> >               
> >               if (attchMatcher.find())
> >               {
> >                 // do nothing
> >               } else if (!have_msgid && have_size)
> >               {
> >                 logger.finest("!have_msgid && have_size");
> >                 mi.MailID = new String(matcher.group(1));
> >                 mi.flagged = flagged;
> >                 flagged = false;
> >                 mi.unread = false;
> >                 matcher = unreadPattern.matcher(line);
> >                 
> >                 if (matcher.find())
> >                 {
> >                   mi.unread = true;
> >                 }
> >                 line = br.readLine();
> >                 matcher = unreadPattern.matcher(line);
> >                 
> >                 if (matcher.find())
> >                 {
> >                   mi.unread = true;
> >                 }
> >                 messageIDS.add(mi);
> >                 message_index++;
> >                 logger.fine("MsgId: " + mi + " added to message list (code section 
> > a)");
> >                 mi = new MailIdentifier();
> >                 have_msgid = false;
> >                 have_size = false;
> >               } else if (!have_msgid && !have_size)
> >               {
> >                 logger.finest("!have_msgid && !have_size");
> >                 mi.MailID = new String(matcher.group(1));
> >                 mi.flagged = flagged;
> >                 flagged = false;
> >                 mi.unread = false;
> >                 matcher = unreadPattern.matcher(line);
> >                 
> >                 if (matcher.find())
> >                 {
> >                   mi.unread = true;
> >                 }
> >                 line = br.readLine();
> >                 matcher = unreadPattern.matcher(line);
> >                 
> >                 if (matcher.find())
> >                 {
> >                   mi.unread = true;
> >                 }
> >                 have_msgid = true;
> >               }
> >             }
> >           }
> >           matcher = flaggedPattern.matcher(line);
> >           
> >           if (matcher.find())
> >           {
> >             logger.info("flag");
> >             flagged = true;
> >           }
> >           matcher = sizePattern.matcher(line);
> >           
> >           if (matcher.find())
> >           {
> >             logger.fine(matcher.group(0));
> >             logger.fine(line);
> >             int sizenn = (new Integer(matcher.group(2))).intValue();
> >             
> >             if (matcher.group(3).equals("k"))
> >             {
> >               sizenn *= 1024;
> >             }
> >             
> >             if (!have_msgid && !have_size)
> >             {
> >               mi.size = sizenn;
> >               have_size = true;
> >             } else if (have_msgid && !have_size)
> >             {
> >               logger.finest("have_msgid && !have_size");
> >               mi.size = sizenn;
> >               messageIDS.add(mi);
> >               logger.fine("MsgId: " + mi + " added to message list (code section 
> > b)");
> >               mi = new MailIdentifier();
> >               message_index++;
> >               have_msgid = false;
> >               have_size = false;
> >               flagged = false;
> >             }
> >           }
> >         }
> >         inbox_index++;
> >       }
> >     } catch (Exception e)
> >     {
> >       logger.log(Level.SEVERE, "should not happen", e);
> >     }
> >     
> >     if (filtereMessageIDS == null)
> >     {
> >       filtereMessageIDS = new Vector();
> >     }
> >     
> >     for (Iterator i = messageIDS.iterator(); i.hasNext();)
> >     {
> >       MailIdentifier mi = (MailIdentifier) i.next();
> >       
> >       // here is the filter
> >       // the default is if the message is unread
> >       if (mi.unread)
> >       {
> >         filtereMessageIDS.add(mi);
> >       }
> >     }
> >     gotNumMessages = true;
> >     if (filtereMessageIDS.size() == 0)
> >     {
> >       logger.info("No messages");
> >     }
> >     logger.finest("numMessages() - " + filtereMessageIDS.size());
> >     return filtereMessageIDS.size();
> >   }
> >   
> >   private boolean foundID(String messageID)
> >   {
> >     for (Iterator i = messageIDS.iterator(); i.hasNext();)
> >     {
> >       MailIdentifier mi = (MailIdentifier) i.next();
> >       
> >       if (mi.MailID.equals(messageID))
> >       {
> >         return true;
> >       }
> >     }
> >     return false;
> >   }
> >   
> >   public void printMessageNumber(int number)
> >   {
> >     if (number >= number_messages)
> >     {
> >       return;
> >     }
> >     String bodyPart1 = "/ym/ShowLetter?box=Inbox&MsgId=";
> >     String bodyPart2 = "&bodyPart=";
> >     
> >     /* print the header first */
> >     try
> >     {
> >       URL url = new URL(baseUrl + bodyPart1 + (String) 
> > messageIDS.elementAt(number) + bodyPart2 + "HEADER");
> >       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       HTTPRedirectHandler hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       BufferedReader br = new BufferedReader(new 
> > InputStreamReader(conn.getInputStream()));
> >       String line = null;
> >       
> >       while ((line = br.readLine()) != null)
> >       {
> >         logger.finest("html: " + line);
> >       }
> >       /* now the text or body of the message */
> >       url = new URL(baseUrl + bodyPart1 + (String) messageIDS.elementAt(number) + 
> > bodyPart2 + "TEXT");
> >       conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
> >       line = null;
> >       
> >       while ((line = br.readLine()) != null)
> >       {
> >         logger.finest("html: " + line);
> >       }
> >     } catch (Exception e)
> >     {
> >       logger.log(Level.SEVERE, "should not happen", e);
> >     }
> >   }
> >   
> >   // num is not zero based!!! range is from 1 -> size
> >   public int getSizeOfMessage(int num)
> >   {
> >     if (filtereMessageIDS == null)
> >     {
> >       numMessages();
> >     }
> >     
> >     if ((num > filtereMessageIDS.size()) || (num < 1))
> >     {
> >       return -1;
> >     }
> >     MailIdentifier mi = (MailIdentifier) filtereMessageIDS.elementAt(num - 1);
> >     return mi.size;
> >   }
> >   
> >   //one based
> >   public void outputMessage(int num, PrintWriter pw)
> >   {
> >     if ((num > numMessages()) || (num < 1))
> >     {
> >       return;
> >     }
> >     String bodyPart1 = "/ym/ShowLetter?box=Inbox&MsgId=";
> >     String bodyPart2 = "&bodyPart=";
> >     /* print the header first */
> >     Pattern badHeader1 = Pattern.compile("\\AFrom\\s+");
> >     
> >     try
> >     {
> >       URL url = new URL(baseUrl + bodyPart1 + ((MailIdentifier) 
> > (filtereMessageIDS.elementAt(num - 1))).MailID
> >       + bodyPart2 + "HEADER");
> >       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       HTTPRedirectHandler hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       BufferedReader br = new BufferedReader(new 
> > InputStreamReader(conn.getInputStream()));
> >       String line = null;
> >       
> >       while ((line = br.readLine()) != null)
> >       {
> >         if (!badHeader1.matcher(line).find())
> >         {
> >           pw.print(line + "\r\n");
> >         }
> >       }
> >       /* now the text or body of the message */
> >       url = new URL(baseUrl + bodyPart1 + ((MailIdentifier) 
> > (filtereMessageIDS.elementAt(num - 1))).MailID
> >       + bodyPart2 + "TEXT");
> >       conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
> >       line = null;
> >       
> >       while ((line = br.readLine()) != null)
> >       {
> >         pw.print(line + "\r\n");
> >       }
> >     } catch (Exception e)
> >     {
> >       logger.log(Level.SEVERE, "should not happen", e);
> >     }
> >   }
> >   
> >   
> >   //one based
> >   public void outputLinesMessage(int num, PrintWriter pw, int numLines)
> >   {
> >     if ((num > numMessages()) || (num < 1))
> >     {
> >       return;
> >     }
> >     String bodyPart1 = "/ym/ShowLetter?box=Inbox&MsgId=";
> >     String bodyPart2 = "&bodyPart=";
> >     int linesSent = 0;
> >     /* print the header first */
> >     Pattern badHeader1 = Pattern.compile("\\AFrom\\s+");
> >     
> >     try
> >     {
> >       URL url = new URL(baseUrl + bodyPart1 + ((MailIdentifier) 
> > (filtereMessageIDS.elementAt(num - 1))).MailID
> >       + bodyPart2 + "HEADER");
> >       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       HTTPRedirectHandler hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       BufferedReader br = new BufferedReader(new 
> > InputStreamReader(conn.getInputStream()));
> >       String line = null;
> >       
> >       while ((line = br.readLine()) != null)
> >       {
> >         if (!badHeader1.matcher(line).find())
> >         {
> >           pw.print(line + "\r\n");
> >         }
> >       }
> >       /* now the text or body of the message */
> >       url = new URL(baseUrl + bodyPart1 + ((MailIdentifier) 
> > (filtereMessageIDS.elementAt(num - 1))).MailID
> >       + bodyPart2 + "TEXT");
> >       conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
> >       line = null;
> >       
> >       while (((line = br.readLine()) != null) && (linesSent < numLines))
> >       {
> >         pw.print(line + "\r\n");
> >         linesSent++;
> >       }
> >     } catch (Exception e)
> >     {
> >       logger.log(Level.SEVERE, "should not happen", e);
> >       ;
> >     }
> >     
> >     //Depending on option value, we may be required to mark the message as unread 
> > after TOP command
> >     //we won't do it by default as it is quite expensive...
> >     if (leaveUnreadAfterTOP)
> >     {
> >       markMessageAsUnread(num);
> >     }
> >   }
> >   
> >   protected void markMessageAsUnread(int num)
> >   {
> >     if ((num > numMessages()) || (num < 1))
> >     {
> >       return;
> >     }
> >     logger.log(Level.INFO, "Marking letter as unread after TOP command: " + num);
> >     String bodyPart1 = "/ym/ShowLetter?box=Inbox&MsgId=";
> >     /* print the header first */
> >     Pattern markUnreadUrlPattern = Pattern.compile("<a href=\"(\\S+)\">Mark as 
> > Unread</a>");
> >     String unReadUrlStr = null;
> >     try
> >     {
> >       URL url = new URL(baseUrl + bodyPart1 + ((MailIdentifier) 
> > (filtereMessageIDS.elementAt(num - 1))).MailID);
> >       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       HTTPRedirectHandler hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       BufferedReader br = new BufferedReader(new 
> > InputStreamReader(conn.getInputStream()));
> >       String line = null;
> >       
> >       Matcher unReadUrlMatcher = null;
> >       
> >       while ((line = br.readLine()) != null)
> >       {
> >         unReadUrlMatcher = markUnreadUrlPattern.matcher(line);
> >         if (unReadUrlMatcher.find())
> >         {
> >           unReadUrlStr = unReadUrlMatcher.group(1);
> >           logger.log(Level.FINE, "Found Unread URL: " + unReadUrlStr);
> >         }
> >       }
> >       
> >       //mark the message as unread again...
> >       url = new URL(baseUrl + unReadUrlStr);
> >       conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
> >       line = null;
> >       
> >       while ((line = br.readLine()) != null)
> >       {
> >         //do nothing
> >       }
> >       
> >     } catch (Exception e)
> >     {
> >       logger.log(Level.SEVERE, "Exception in markMessageAsUnread", e);
> >       ;
> >     }
> >   }
> >   
> >   public String getUniqueMessageId(int num) throws MailSessionException
> >   {
> >     int numMsgs = numMessages();
> >     if ((num > numMsgs) || (num < 1))
> >     {
> >       logger.info("getUniqueMessageId - id out of range (" + num + "/" + numMsgs);
> >       return "";
> >     }
> >     
> >     if (messageIDS == null)
> >     {
> >       return "";
> >     }
> >     MailIdentifier mi = (MailIdentifier) messageIDS.elementAt(num - 1);
> >     return mi.MailID;
> >   }
> >   
> >   public void quitSession()
> >   {
> >     //Empty Trash folder if option is enabled and we have the url - ch 03/10/03
> >     if (emptyTrash && trashEmptyUrl != null)
> >     {
> >       logger.finest("About to Empty Trash....");
> >       
> >       try
> >       {
> >         URL url = new URL(baseUrl + trashEmptyUrl);
> >         logger.finest(url.toString());
> >         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
> >         conn.setRequestProperty("User-Agent", UserAgent);
> >         conn.setRequestProperty("Accept", "*/*");
> >         conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >         conn.setInstanceFollowRedirects(false);
> >         HTTPRedirectHandler hrh = new HTTPRedirectHandler(conn);
> >         hrh.setCookieJar(cj);
> >         hrh.connect();
> >         cj.addAll(hrh.getCookieJar());
> >         BufferedReader br = new BufferedReader(new 
> > InputStreamReader(conn.getInputStream()));
> >         String line = null;
> >         
> >         while ((line = br.readLine()) != null)
> >         {
> >           logger.finest("html: " + line);
> >         }
> >         
> >         logger.finest("Trash Emptied.");
> >       } catch (Exception e)
> >       {
> >         logger.log(Level.SEVERE, "Exception whilst emptying trash!", e);
> >       }
> >     }
> >   }
> >   
> >   public boolean deleteMessage(int number) throws MailSessionException
> >   {
> >     if ((number > numMessages()) || (number < 1))
> >     {
> >       logger.info("DeleteMessage - id out of range (" + number + "/" + 
> > number_messages + ")");
> >       return false;
> >     }
> >     logger.info("Deleting message id: " + number + " " + ((MailIdentifier) 
> > (filtereMessageIDS.elementAt(number - 1))).MailID);
> >     String bodyPart1 = "/ym/ShowFolder?box=Inbox&DEL=Delete&Mid=";
> >     
> >     /* print the header first */
> >     try
> >     {
> >       URL url = new URL(baseUrl + bodyPart1 + ((MailIdentifier) 
> > (filtereMessageIDS.elementAt(number - 1))).MailID + "&.crumb=" + crumb); 
> > //(String)( messageIDS.elementAt(number)));
> >       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
> >       conn.setRequestProperty("User-Agent", UserAgent);
> >       conn.setRequestProperty("Accept", "*/*");
> >       conn.setRequestProperty("Allowed", "GET HEAD PUT");
> >       conn.setInstanceFollowRedirects(false);
> >       HTTPRedirectHandler hrh = new HTTPRedirectHandler(conn);
> >       hrh.setCookieJar(cj);
> >       hrh.connect();
> >       cj.addAll(hrh.getCookieJar());
> >       BufferedReader br = new BufferedReader(new 
> > InputStreamReader(conn.getInputStream()));
> >       String line = null;
> >       
> >       while ((line = br.readLine()) != null) { logger.finest("html: " + line); }
> >     } catch (Exception e)
> >     {
> >       logger.log(Level.SEVERE, "should not happen", e);
> >     }
> >     return true;
> >   }
> >   
> >   public String getModuleName()
> >   {
> >     return MODULE_INFO.getModuleID();
> >   }
> >   
> >   public String[] getRecognizedExtensions()
> >   {
> >     String[] extensions = {"@yahoo.com", "@yahoo.com.au", "@yahoo.co.uk", 
> > "@yahoo.ca", "@yahoo.fr", "@yahoo.com.hk", "@yahoo.de", "@yahoo.es", 
> > "@yahoo.co.in"};
> >     return extensions;
> >   }
> >   
> >   /**
> >    * Return the module info.
> >    */
> >   public ModuleInfo getModuleInfo() { return MODULE_INFO; }
> >   
> >   /**
> >    * Set a module option with a value from the preferences or from the GUI
> >    * Currently understood options are listed in the MODULE_INFO specification 
> > above.
> >    */
> >   public void setOption(String optionName, String value)
> >   {
> >     if ("yahoo.https".equals(optionName)) { useHttps = 
> > "true".equalsIgnoreCase(value); } 
> >     else if ("yahoo.emptyTrash".equals(optionName)) { emptyTrash = 
> > "true".equalsIgnoreCase(value); } 
> >     else if ("yahoo.unreadAfterTop".equals(optionName)) { leaveUnreadAfterTOP = 
> > "true".equalsIgnoreCase(value); }
> >   }
> > }
> > 
> > class MailIdentifier
> > {
> >   String MailID = null;
> >   boolean unread = false;
> >   boolean flagged = false;
> >   int size;
> >   
> >   public String toString() { return new String("MailID=" + MailID + ",  unread=" + 
> > unread + "   flagged=" + flagged + "    size=" + size); }
> > }
> > =============================================================================================================================================================
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to