package WWW::Hotmail; use Carp; use base 'WWW::Mechanize'; use 5.006; use strict; use warnings; our $VERSION = '0.01'; sub new { my $class = shift; my $self = $class->SUPER::new(); $self->cookie_jar({}); return $self; } sub login { my $self = shift; my $resp = $self->get("http://www.hotmail.com/"); $resp->is_success || croak $resp->error_as_HTML; $self->form(1); $self->field(login => shift); $self->field(passwd => shift); $resp = $self->click("enter"); $resp->is_success || croak $resp->error_as_HTML; $self->{content} =~ /URL=(.+js=no)/ or die "Hotmail format changed!"; $self->get($1); croak "Couldn't log in " unless $self->{forms}[1]; $self->form(2); $self->click; $self->{_WWWHotmail_msgs} = [ map { my $x = WWW::Hotmail::Message->new; $x->{_WWW_Hotmail_msg} = $_; $x->{_WWW_Hotmail_parent} = $self; $x } grep { $_->[0] =~ /getmsg/ } @{$self->extract_links} ]; } sub messages { my $self = shift; croak "Not logged in!" unless $self->{_WWWHotmail_msgs}; return @{$self->{_WWWHotmail_msgs}}; } package WWW::Hotmail::Message; @WWW::Hotmail::Message::ISA = qw(WWW::Hotmail); use Mail::Audit; sub subject { $_[0]->{_WWW_Hotmail_msg}[1] } sub retrieve { my $self = shift; my $resp = $self->{_WWW_Hotmail_parent}->get( $self->{_WWW_Hotmail_msg}[0]."&raw=0" ); $resp->is_success || croak $resp->error_as_HTML; my @mail = split /\n/, $self->{_WWW_Hotmail_parent}->{content}; shift @mail; pop @mail until $mail[-1] =~ m||; pop @mail; return Mail::Audit->new(data => \@mail); } sub delete { my $self = shift; my $resp = $self->{_WWW_Hotmail_parent}->get($self->{_WWW_Hotmail_msg}[0]); $resp->is_success || croak $resp->error_as_HTML; for (@{$self->{_WWW_Hotmail_parent}->extract_links()}) { if ($_->[1] eq "Delete") { $self->{_WWW_Hotmail_parent}->get($_->[0]); last; } } } 1; __END__ # Below is stub documentation for your module. You'd better edit it! =head1 NAME WWW::Hotmail - Connect to Hotmail and download messages =head1 SYNOPSIS use WWW::Hotmail; my $browser = new WWW::Hotmail; $browser->login("foo", "bar"); for ($browser->messages) { $_->retrieve->accept; $_->delete; } =head1 DESCRIPTION This module is a partial replacement for the C script (http://ssl.usu.edu/paul/gotmail/), so if this doesn't do what you want, try that instead. Create a new C object with C, and then log in with your Hotmail username and password. This will allow you to use the C method to look at the mail in your inbox. This method returns a list of Cs; each message supports three methods: C gives you the subject of the email, just because it was stunningly easy to implement. C turns the email into a C object - see L for more details. Finally C moves it to your trash. That's it. I said it was partial. =head1 SEE ALSO L, L, C =head1 NOTE This module is reasonable fragile. It seems to work, but I haven't tested edge cases. If it breaks, you get to keep both pieces. I hope to improve it in the future, but this is enough for release. =head1 AUTHOR Simon Cozens, Esimon@kasei.comE =head1 COPYRIGHT AND LICENSE Copyright 2003 by Kasei This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut