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]