B
bobano
Hi everyone
I am writing a POP3 Client program in Perl. You connect to a POP
Server and have a running conversation with the mail server usin
commands from the RFC 1939 Post Office Protocol. This program ca
perform 5 options from a menu on your POP3 mail by logging in with th
correct POP3 server along with a user name and password that you use t
log in to your ISP. The user name and password as well as the serve
name are all hard-coded into the program and no user input is required
You just have to hard-code your ISP server ($host variable), user nam
($username variable) and password ($mypass variable) into the program
I can't figure out how to get the e-mail messages required in "Lis
Messages" in Menu Option 1 of my program to display a list of th
messages displaying ONLY the message number, who the message is fro
and the subject. I am not displaying the entire text of the message i
Option 1.
I am close to getting all of the messages in the mailbox listed wit
their message number, who the message is from and the subject but it i
messing up and giving me ALL the header information of the message eve
though I only want the message number defined in the program as well a
the \"From\" and \"Subject\" fields. It also seems to be only displayin
the header info for one of the messages which means something is fault
with the \"for\" loop that I created and it is not looping through th
mail message by message properly.
Can someone also tell me for Option 3 where I need to display th
header and body of the e-mail based on the message number typed in b
the user how I can differentiate between the header and body of eac
message using regular expressions? I should also point out that I a
prohibted from using any of the Net:OP3 Perl modules or POP3Mail Per
modules to complete this so I need to use regular expressions and th
IO::Socket Perl module only.
Here is the code that I have for the program up to this point
#!/usr/bin/perl -
use strict
use IO::Socket qwDEFAULT :crlf)
my $host = shift || 'pop3.sympatico.ca'
my $port = shift || '110'
my $socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort =
$port) or die "no sock $!"
my $choice; # line 1
my $answer
my $username
my $mypass
my $msgnum
my $msgcount = 0
$username = "x9xxxx99"; # format masks for user name and password for
$mypass = "99xxx9x9"; # ISP accoun
print $mypass
$answer = <$socket>
print "$answer\n"
# send username, pas
print $socket "user " . $username,CRLF
$answer = <$socket>
print $socket "pass " . $mypass,CRLF
$answer .= <$socket>
print "$answer\n"
#line 3
system("cls")
print "=======================================================\n"
print "POP3 Mail Client you have " . $msgcount. "messages waiting.\n"
print "=======================================================\n"
while (1)
# men
print " 1 List Messages\n"
print " 2 Display body\n"
print " 3 Display header and body\n"
print " 4 Write message to a file\n"
print " 5 Delete message on the server\n"
print " 6 Quit\n\n"
print "Enter choice: "
chomp ($choice = <STDIN>)
if ($choice =~ /^1$/)
print $socket "STAT",CRLF
$answer = <$socket>
print "$answer\n\n"
if ($answer =~ /^\+OK\s(\d{1,}).*/)
$msgcount = $1
print "You have " . $msgcount . " messages"
}
if ($msgcount > 0)
for (my $i = 0; $i < $msgcount; $i++)
print $socket "STAT",CRLF
$answer = <$socket>
print "$answer\n\n"
$msgnum = $i
print "Message Number: " . $msgnum
print $socket "RETR " . $msgnum,CRLF
$answer = <$socket>
if ($answer =~ /^\-ERR/)
print "ERROR"
else
if ( $answer =~ /^From.*)/ ) {
print "From: $1\n"
if ( $answer =~ /^Subject.*)/ )
print "Subject: $2\n"
print "\n"
}
else
print "\n\nYou currently have no messages."
<STDIN>
next
}
next
if ($choice =~ /^2$/) {
print "\nPlease enter message number: "
chomp($msgnum = <STDIN>);
print $socket "RETR ".$msgnum,CRLF
$answer = <$socket>
if ($answer =~ /^\-ERR/)
print "Error: invalid message number"
<STDIN>
next
else
}
next
}
if ($choice =~ /^3$/)
print "\nPlease enter message number: "
chomp($msgnum = <STDIN>);
print $socket "RETR ".$msgnum,CRLF;
$answer = <$socket>;
if ($answer =~ /^\-ERR/) {
print "Error: invalid message number";
<STDIN>;
next;
}
else {
}
next;
}
if ($choice =~ /^4$/) {
print "\nPlease enter message number: ";
chomp($msgnum = <STDIN>);
print $socket "RETR ".$msgnum,CRLF;
$answer = <$socket>;
if ($answer =~ /^\-ERR/) {
print "Error: invalid message number";
<STDIN>;
next;
}
else {
}
next;
}
if ($choice =~ /^5$/) {
print "\nPlease enter message number: ";
chomp($msgnum = <STDIN>);
print $socket "RETR ".$msgnum,CRLF;
$answer = <$socket>;
if ($answer =~ /^\-ERR/) {
print "Error: invalid message number";
<STDIN>;
next;
}
else {
}
next;
}
if ($choice =~ /^6$/) {
print $socket "QUIT",CRLF;
print "exiting\n" and last;
}
}
If this is too confusing to read (my first time posting on here which
may be causing the code to look funny), I have also attached the code
in a .txt document that will need to be renamed to a .pl extension in
order to execute it as a PERL program.
If anyone can give me any assistance on this problem, it would be
greatly appreciated. Thanks.
+-------------------------------------------------------------------+
|Filename: pop3.txt |
|Download: http://helpfeeds.com/attachment.php?attachmentid=480 |
+-------------------------------------------------------------------+
I am writing a POP3 Client program in Perl. You connect to a POP
Server and have a running conversation with the mail server usin
commands from the RFC 1939 Post Office Protocol. This program ca
perform 5 options from a menu on your POP3 mail by logging in with th
correct POP3 server along with a user name and password that you use t
log in to your ISP. The user name and password as well as the serve
name are all hard-coded into the program and no user input is required
You just have to hard-code your ISP server ($host variable), user nam
($username variable) and password ($mypass variable) into the program
I can't figure out how to get the e-mail messages required in "Lis
Messages" in Menu Option 1 of my program to display a list of th
messages displaying ONLY the message number, who the message is fro
and the subject. I am not displaying the entire text of the message i
Option 1.
I am close to getting all of the messages in the mailbox listed wit
their message number, who the message is from and the subject but it i
messing up and giving me ALL the header information of the message eve
though I only want the message number defined in the program as well a
the \"From\" and \"Subject\" fields. It also seems to be only displayin
the header info for one of the messages which means something is fault
with the \"for\" loop that I created and it is not looping through th
mail message by message properly.
Can someone also tell me for Option 3 where I need to display th
header and body of the e-mail based on the message number typed in b
the user how I can differentiate between the header and body of eac
message using regular expressions? I should also point out that I a
prohibted from using any of the Net:OP3 Perl modules or POP3Mail Per
modules to complete this so I need to use regular expressions and th
IO::Socket Perl module only.
Here is the code that I have for the program up to this point
#!/usr/bin/perl -
use strict
use IO::Socket qwDEFAULT :crlf)
my $host = shift || 'pop3.sympatico.ca'
my $port = shift || '110'
my $socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort =
$port) or die "no sock $!"
my $choice; # line 1
my $answer
my $username
my $mypass
my $msgnum
my $msgcount = 0
$username = "x9xxxx99"; # format masks for user name and password for
$mypass = "99xxx9x9"; # ISP accoun
print $mypass
$answer = <$socket>
print "$answer\n"
# send username, pas
print $socket "user " . $username,CRLF
$answer = <$socket>
print $socket "pass " . $mypass,CRLF
$answer .= <$socket>
print "$answer\n"
#line 3
system("cls")
print "=======================================================\n"
print "POP3 Mail Client you have " . $msgcount. "messages waiting.\n"
print "=======================================================\n"
while (1)
# men
print " 1 List Messages\n"
print " 2 Display body\n"
print " 3 Display header and body\n"
print " 4 Write message to a file\n"
print " 5 Delete message on the server\n"
print " 6 Quit\n\n"
print "Enter choice: "
chomp ($choice = <STDIN>)
if ($choice =~ /^1$/)
print $socket "STAT",CRLF
$answer = <$socket>
print "$answer\n\n"
if ($answer =~ /^\+OK\s(\d{1,}).*/)
$msgcount = $1
print "You have " . $msgcount . " messages"
}
if ($msgcount > 0)
for (my $i = 0; $i < $msgcount; $i++)
print $socket "STAT",CRLF
$answer = <$socket>
print "$answer\n\n"
$msgnum = $i
print "Message Number: " . $msgnum
print $socket "RETR " . $msgnum,CRLF
$answer = <$socket>
if ($answer =~ /^\-ERR/)
print "ERROR"
else
if ( $answer =~ /^From.*)/ ) {
print "From: $1\n"
if ( $answer =~ /^Subject.*)/ )
print "Subject: $2\n"
print "\n"
}
else
print "\n\nYou currently have no messages."
<STDIN>
next
}
next
if ($choice =~ /^2$/) {
print "\nPlease enter message number: "
chomp($msgnum = <STDIN>);
print $socket "RETR ".$msgnum,CRLF
$answer = <$socket>
if ($answer =~ /^\-ERR/)
print "Error: invalid message number"
<STDIN>
next
else
}
next
}
if ($choice =~ /^3$/)
print "\nPlease enter message number: "
chomp($msgnum = <STDIN>);
print $socket "RETR ".$msgnum,CRLF;
$answer = <$socket>;
if ($answer =~ /^\-ERR/) {
print "Error: invalid message number";
<STDIN>;
next;
}
else {
}
next;
}
if ($choice =~ /^4$/) {
print "\nPlease enter message number: ";
chomp($msgnum = <STDIN>);
print $socket "RETR ".$msgnum,CRLF;
$answer = <$socket>;
if ($answer =~ /^\-ERR/) {
print "Error: invalid message number";
<STDIN>;
next;
}
else {
}
next;
}
if ($choice =~ /^5$/) {
print "\nPlease enter message number: ";
chomp($msgnum = <STDIN>);
print $socket "RETR ".$msgnum,CRLF;
$answer = <$socket>;
if ($answer =~ /^\-ERR/) {
print "Error: invalid message number";
<STDIN>;
next;
}
else {
}
next;
}
if ($choice =~ /^6$/) {
print $socket "QUIT",CRLF;
print "exiting\n" and last;
}
}
If this is too confusing to read (my first time posting on here which
may be causing the code to look funny), I have also attached the code
in a .txt document that will need to be renamed to a .pl extension in
order to execute it as a PERL program.
If anyone can give me any assistance on this problem, it would be
greatly appreciated. Thanks.
+-------------------------------------------------------------------+
|Filename: pop3.txt |
|Download: http://helpfeeds.com/attachment.php?attachmentid=480 |
+-------------------------------------------------------------------+