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]