Guest User

Untitled

a guest
Apr 13th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. ############################################################
  2. #### BSTRD::IMAP
  3. #### v1.00
  4. #### (C)2009 Warbucks Heavy Industries, LLC
  5. ############################################################
  6.  
  7. use MooseX::Declare;
  8. use MooseX::AttributeHelpers;
  9.  
  10. use BSTRD::Object::Email;
  11. use IO::Socket::SSL;
  12.  
  13. #with qw(
  14. # MooseX::LogDispatch::Levels
  15. #);
  16.  
  17. #has logger => (
  18. # metaclass => 'NoGetopt',
  19. # isa => 'Log::Dispatch::Config',
  20. # is => 'rw',
  21. # lazy_build => 1,
  22. #);
  23.  
  24. class BSTRD::IMAP {
  25.  
  26. our $VERSION = '1.00';
  27.  
  28. has username => (
  29. isa => 'Str',
  30. is => 'ro',
  31. );
  32.  
  33. has password => (
  34. isa => 'Str',
  35. is => 'ro',
  36. );
  37.  
  38. has imap => (
  39. isa => 'IO::Socket::SSL',
  40. is => 'rw',
  41. default => { IO::Socket::SSL->new("imap.gmail.com:993") },
  42. );
  43.  
  44. method login {
  45. my $email = $self->email;
  46. my $pass = $self->pass;
  47.  
  48. #### Clear the banner line;
  49. $self->imap->getline();
  50.  
  51. $self->imap->write( "NIC1 LOGIN $email $pass\015\012" );
  52. $self->get_data;
  53. }
  54.  
  55. method imapselect (Str $box) {
  56. $box = "INBOX" unless $box;
  57. $self->imap->write("NIC2 SELECT $box\015\012");
  58. $self->get_data;
  59. }
  60.  
  61. method get_unseen {
  62. $self->imap->write("NIC3 SEARCH UNSEEN\015\012");
  63. my $res = $self->get_data;
  64. chomp $res;
  65. $res =~ s/^\* SEARCH //i;
  66. my @ids = split( / / , $res );
  67. return \@ids;
  68. }
  69.  
  70. method mark_read (Int $msgid) {
  71. return unless ($msgid);
  72. $self->imap->write("NIC4 STORE $msgid FLAGS(\\Seen)\015\012");
  73. $self->get_data;
  74. }
  75.  
  76. method fetch_message (Int $msgid) {
  77. $self->imap->write("NIC5 FETCH $msgid UID\015\012") ;
  78.  
  79. $res = $self->get_data;
  80. my ( $uid ) = $res =~ /UID (\d+)/ ;
  81.  
  82. $self->imap->write("NIC5 UID FETCH $uid BODY.PEEK[]\015\012");
  83.  
  84. return get_data;
  85. }
  86.  
  87. method get_data {
  88. my $data;
  89. while ( my $tmp = $self->imap->getline() ) {
  90. last if $data =~ /NIC\d+ OK.*Success/;
  91. $data .= $tmp;
  92. }
  93. return $data;
  94. }
  95.  
  96. method process (Bool $markread) {
  97. $self->login;
  98. $self->imapselect;
  99. my $ids = $self->get_unseen;
  100. my @emailobjs;
  101.  
  102. foreach my $id (@$ids) {
  103. push (@emailobjs,
  104. BSTRD::Object::Email->new(
  105. login => $self->email,
  106. rawmsg => $self->fetch_message($id)
  107. )
  108. );
  109. $self->mark_read ($id) if ($markread);
  110. }
  111. return \@emailobjs;
  112. }
  113.  
  114. }
  115. 1; # End of BSTRD::IMAP
Add Comment
Please, Sign In to add comment