Hotmail keeps making changes. This diff (from GetLive CVS) allows p5-GetLive to work again. Note, you have to update Mode=200902 in your configuration file. You also have to clear out the "Hi, Jerk, We've made changes. Click here not to see this stupid message again." message.
ok? -ME Index: Makefile =================================================================== RCS file: /cvs/ports/mail/p5-GetLive/Makefile,v retrieving revision 1.5 diff -u -p -r1.5 Makefile --- Makefile 10 Nov 2008 20:23:50 -0000 1.5 +++ Makefile 7 Mar 2009 05:19:52 -0000 @@ -3,7 +3,7 @@ COMMENT= automatically fetch hotmail.com email DISTNAME= GetLive_0_57 -PKGNAME= p5-GetLive-0.57p0 +PKGNAME= p5-GetLive-0.57p1 CATEGORIES= mail perl5 EXTRACT_SUFX= .tgz Index: patches/patch-GetLive_pl =================================================================== RCS file: /cvs/ports/mail/p5-GetLive/patches/patch-GetLive_pl,v retrieving revision 1.4 diff -u -p -r1.4 patch-GetLive_pl --- patches/patch-GetLive_pl 11 Nov 2008 22:03:59 -0000 1.4 +++ patches/patch-GetLive_pl 7 Mar 2009 05:19:52 -0000 @@ -1,6 +1,8 @@ +Diff from GetLive CVS to incorporate Hotmail site changes. + $OpenBSD: patch-GetLive_pl,v 1.4 2008/11/11 22:03:59 merdely Exp $ ---- GetLive.pl.orig Mon Nov 10 14:39:12 2008 -+++ GetLive.pl Mon Nov 10 14:41:25 2008 +--- GetLive.pl.orig Sat Jul 5 16:27:36 2008 ++++ GetLive.pl Fri Mar 6 23:56:19 2009 @@ -65,11 +65,12 @@ my $Password = ""; my $Domain = 'hotmail.com'; my $CurlCommand = 'curl -k'; @@ -57,8 +59,8 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 Display("Delete must be 'No' when MoveToFolder is also specified in the configuration file.\n",stderr=>1); DisplayUsageAndExit(); } -+ if ($Mode !~ m/^(200809|200810)$/i) { -+ Display("Mode must be oneof 200809 or 200810 as argument in the configuration file.\n",stderr=>1); ++ if ($Mode !~ m/^(200809|200810|200902)$/i) { ++ Display("Mode must be oneof 200809,200810,200902 as argument in the configuration file.\n",stderr=>1); + DisplayUsageAndExit(); + } } @@ -73,7 +75,38 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 # We expect here a number of functions now (aug 2007) to be hidden in a javascript # that is loaded separately. Let's load and append. -@@ -960,7 +973,7 @@ sub GetMessagesFromFolder($) { +@@ -690,7 +703,9 @@ REENTRY_DARREN_QUIRK: + + Display("LoginUrl 2 : '$LoginUrl'.\n",MinVerbosity => 10); + # Following the redirect : Third step of login. +- Display("Following redirect.\n",MinVerbosity => 2); ++ Display("Following redirect.\n",MinVerbosity => 2); ++ ++LABEL_20090214: + ($LoginPageAsString,$GetPageUrl) = GetPage(Url => $LoginUrl,FollowForward => 1); + + $LoginUrl = $GetPageUrl; +@@ -716,6 +731,19 @@ REENTRY_DARREN_QUIRK: + } elsif ($LoginPageAsString =~ m/MSNPlatform\/browsercompat.js/) { + $LoggedIn = 1; + } ++ ++ # Since 14/2/2009 we are not logged in anymore now ... ++ ++ my $Tried20090214 = 0; ++ if (!$LoggedIn && !$Tried20090214) { ++ if ($LoginPageAsString !~ m/src=\"([^\"]*)\"/) { ++ die "Could not log in. Maybe structure has changed or was not foreseen."; ++ } ++ $LoginUrl = HtmlUnescape($1); ++ Display("Following link '$LoginUrl'.\n",MinVerbosity=>2); ++ $Tried20090214 = 1; ++ goto LABEL_20090214 ++ } + + die "Could not log in. Maybe structure has changes or was not foreseen." unless $LoggedIn; + +@@ -960,7 +988,7 @@ sub GetMessagesFromFolder($) { "au=$AuthUser&". "ptid=0"; my $PostData = ""; @@ -82,7 +115,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 $PostData = "cn=Microsoft.Msn.Hotmail.Ui.Fpp.MailBox". "&". "mn=GetInboxData". -@@ -971,7 +984,7 @@ sub GetMessagesFromFolder($) { +@@ -971,7 +999,7 @@ sub GetMessagesFromFolder($) { "v=1". "&". "mt=$MT"; @@ -91,7 +124,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 $PostData = "cn=Microsoft.Msn.Hotmail.Ui.Fpp.MailBox". "&". "mn=GetInboxData". -@@ -979,11 +992,37 @@ sub GetMessagesFromFolder($) { +@@ -979,11 +1007,37 @@ sub GetMessagesFromFolder($) { "d=true,true,{".uri_escape("\"$FolderId\"").",25,NextPage,0,Date,false,". uri_escape("\"$pnAm\"") . "," . uri_escape("\"$pnAd\"") . "," . @@ -101,7 +134,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 "v=1". "&". "mt=$MT"; -+ } elsif ($Mode =~ m/200810/ && $Page == 1) { ++ } elsif ($Mode =~ m/(200810|200902)/ && $Page == 1) { + $PostData = "cn=Microsoft.Msn.Hotmail.Ui.Fpp.MailBox". + "&". + "mn=GetInboxData". @@ -114,7 +147,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 + "v=1". + "&". + "mt=$MT"; -+ } elsif ($Mode =~ m/200810/) { ++ } elsif ($Mode =~ m/(200810|200902)/) { + $PostData = "cn=Microsoft.Msn.Hotmail.Ui.Fpp.MailBox". + "&". + "mn=GetInboxData". @@ -130,7 +163,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 } ($PageAsString,$GetPageUrl) = GetPage(Url => $Url,CurlDataArg => $PostData); -@@ -1003,8 +1042,9 @@ sub GetMessagesFromFolder($) { +@@ -1003,8 +1057,9 @@ sub GetMessagesFromFolder($) { # get the ID for the trash folder $TrashFolderId = $PageAsString; @@ -141,7 +174,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 # get the session variables as well as the request handler $PageAsString =~ m/fppCfg\s*?:\s*?{\s*?RequestHandler\s*?:\s*?\"(.*?)\".*?SessionId\s*?:\s*?\"(.*?)\".*?AuthUser\s*?:\s*?\"(.*?)\".*?}/si; -@@ -1016,9 +1056,12 @@ sub GetMessagesFromFolder($) { +@@ -1016,9 +1071,12 @@ sub GetMessagesFromFolder($) { # To start with we limit us to a MessagesArea between # <table class="dItemListContentTable"..> ... </table..> @@ -149,13 +182,13 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 + if ($Mode =~ m/200809/ && $PageAsString !~ m/<table class=\"d?ItemListContentTable[^>]*>(.*?)<\/table/si) { die "Could not correctly parse the messages table."; } -+ if ($Mode =~ m/200810/ && $PageAsString !~ m/<table class=\"d?InboxTable[^>]*>(.*?)<\/table/si) { ++ if ($Mode =~ m/(200810|200902)/ && $PageAsString !~ m/<table class=\"d?InboxTable[^>]*>(.*?)<\/table/si) { + die "Could not correctly parse the messages table."; + } my $MessagesArea = $1; # In this message area there's the body of the table containing messages. -@@ -1046,24 +1089,40 @@ sub GetMessagesFromFolder($) { +@@ -1046,24 +1104,44 @@ sub GetMessagesFromFolder($) { my $MessageId = $1; my $MessageAd = $2; @@ -164,7 +197,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 my $TdLine = ""; - for (my $Idx=0;$Idx<4;$Idx++) { + my $Column = 5; -+ if ($Mode =~ m/200810/) { $Column = 4; } ++ if ($Mode =~ m/(200810|200902)/) { $Column = 4; } + for (my $Idx=0;$Idx<($Column-1);$Idx++) { $MessagesArea =~ m/<td(.*?)>(.*?)<\/td\s*>/i; $MessagesArea = $'; @@ -178,7 +211,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 + die "Parse error for 'from'."; + } + $From = HtmlUnescape($3); -+ } elsif ($Mode =~ /200810/ ) { ++ } elsif ($Mode =~ /(200810|200902)/ ) { + if ($TdLine !~ m/(<[^>]+>)?(.*?)<[^>]+>/si) { + die "Parse error for 'from'."; + } @@ -200,11 +233,15 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 + $MessagesArea =~ m/<td class=\"SubjectCol\">(.*?)<\/td\s*>/i; + $MessagesArea = $'; + $TdLine = $1; ++ } elsif ($Mode =~ /200902/) { ++ $MessagesArea =~ m/<td class=\"Sbj\">(.*?)<\/td\s*>/i; ++ $MessagesArea = $'; ++ $TdLine = $1; + } if ($TdLine !~ m/<a href=\"(.*?)\"\s*>(.*?)<\/a>/si) { die "Parse error for 'subject'."; } -@@ -1091,11 +1150,19 @@ sub GetMessagesFromFolder($) { +@@ -1091,11 +1169,19 @@ sub GetMessagesFromFolder($) { Display("Search for one more page.\n",MinVerbosity => 10); # Search for 'next page' href my $NextPageAd = ""; @@ -217,7 +254,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 + $NextPageAd = $1; + } + die "Could not find an expected next page href. Probably page structure changed." unless $NextPageAd; -+ } elsif ($Mode =~ m/200810/) { ++ } elsif ($Mode =~ m/(200810|200902)/) { + if ($PageAsString =~ + m/<li([^>]*)>\s*<a href=\"([^\"]+)\"[^>]*><img class=\"PageNavigationNext\".*?><\/a>/si) { + $NextPageAd = $1; @@ -228,7 +265,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 if ($NextPageAd !~ m /pnAm=\"([^\"]*)/) { die "Could not find pnAm in '$NextPageAd'."; -@@ -1111,7 +1178,7 @@ sub GetMessagesFromFolder($) { +@@ -1111,7 +1197,7 @@ sub GetMessagesFromFolder($) { Display("Next page Ad : '$pnAd'.\n",MinVerbosity => 10); Display("Next page Am : '$pnAm'.\n",MinVerbosity => 10); } @@ -237,7 +274,7 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 } ######################################################################################################################## -@@ -1221,10 +1288,10 @@ sub GetFolders() { +@@ -1221,10 +1307,10 @@ sub GetFolders() { # Scan the line for all folders, their href and title. # NrFolders on the fly; while ($FolderPageAsString =~ @@ -245,20 +282,20 @@ $OpenBSD: patch-GetLive_pl,v 1.4 2008/11 - $FolderHrefs[$NrFolders] = $1; - $FolderNames[$NrFolders] = HtmlUnescape($2); - $FolderNrMessages[$NrFolders] = $3; -+ m/<td class=\"d?ManageFoldersFolderNameCol\"><a\s*(class=\"PrimaryTextColor\"\s*)?href=\"([^\"]*)\"\s*>(.*?)<\/a>\s*<\/td>\s*<td class=\"d?ManageFoldersTotalCountCol[^\"]*\">(\d+)<\/td>/gc) { ++ m/<td class=\"d?ManageFoldersFolderNameCol\"><a\s*(class=\"PrimaryTextColor\"\s*)?href=\"([^\"]*)\"\s*>(.*?)<\/a>\s*<\/td>\s*(<td\s*class=\"ManageFoldersBufferCol\">[^<]*<\/td>\s*)?<td class=\"d?ManageFoldersTotalCountCol[^\"]*\">(\d+)<\/td>/gc) { + $FolderHrefs[$NrFolders] = $2; + $FolderNames[$NrFolders] = HtmlUnescape($3); -+ $FolderNrMessages[$NrFolders] = $4; ++ $FolderNrMessages[$NrFolders] = $5; if ( $FolderHrefs[$NrFolders] !~ m/FolderID=([^&]*)/ ) { die "Could not detect FolderId."; } -@@ -1257,6 +1324,9 @@ GetFolders(); +@@ -1257,6 +1343,9 @@ GetFolders(); for (my $FolderIdx=0;$FolderIdx<$NrFolders;$FolderIdx++) { next if (scalar keys %FoldersToProcess && not exists $FoldersToProcess{lc $FolderNames[$FolderIdx]}); + next if ( ($SkipTrash =~ m/^Yes$/i) && ($FolderIds[$FolderIdx] eq $TrashFolderId) ); + # JDLA hack. Drafts folder does not work, also not in real. Assuming 000-...-4 is the draft folder. -+ next if ( ($Mode =~ m/200810/) && ($FolderIds[$FolderIdx] =~ m/^(0|-)*4$/)); ++ next if ( ($Mode =~ m/(200810|200902)/) && ($FolderIds[$FolderIdx] =~ m/^(0|-)*4$/)); Display("\nProcessing folder $FolderNames[$FolderIdx].\n",MinVerbosity => 1); GetMessagesFromFolder($FolderIdx); Display("$NrMessagesDetected/$NrMessagesUnread Messages/Unread.\n",MinVerbosity => 1); Index: pkg/MESSAGE =================================================================== RCS file: /cvs/ports/mail/p5-GetLive/pkg/MESSAGE,v retrieving revision 1.2 diff -u -p -r1.2 MESSAGE --- pkg/MESSAGE 10 Nov 2008 20:23:50 -0000 1.2 +++ pkg/MESSAGE 7 Mar 2009 05:19:52 -0000 @@ -6,5 +6,5 @@ ${PREFIX}/share/examples/GetLive. GetLive has been patched to deal with Hotmail changes. Log into Hotmail through a browser and check the box so it never shows the 'changed' page -again. Then, add 'Mode=200810' to your config file. You may also have +again. Then, add 'Mode=200902' to your config file. You may also have to turn off 'reading panes'.