http://www.perlmonks.org?node_id=196853

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I have a script using Net::POP3 to pop mail off a pop3 server. I'd like to forward the mail to another e-mail account without having to use postfix, or even write it to a file. I haven't been able to get it done. Here's what I have so far:
#!/usr/local/bin/perl # # using pop3get -c will leave the mail on the server. # use Net::POP3; use Getopt::Long; use strict 'vars'; use vars qw($opt_c); GetOptions("c!"); my $ServerName = "my.pop3server.com"; my $pop3 = Net::POP3->new($ServerName, Debug => 0); my $UserName = "user"; my $Password = "pass"; my $inbox = "/export/homes/user/Mail/inbox"; my $msg_id; die "Couldn't log on to server" unless $pop3; my $Num_Messages = $pop3->login($UserName, $Password); my $Messages = $pop3->list(); open FH, ">> $inbox" or die "Couldn't open inbox: ($!)\n"; for $msg_id (keys(%$Messages)) { print "Retriving Msg: $msg_id\n"; my $MsgContent = $pop3->get($msg_id); # Here's where I'd like to forward it on.. for (@$MsgContent) { print FH $_; } my $delete_msg = $pop3->delete($msg_id) unless ($opt_c); } close FH; $pop3->quit();

Replies are listed 'Best First'.
Re: Getting Net::POP3 to grab mail then forward it on.
by Kanji (Parson) on Sep 11, 2002 at 03:08 UTC
Re: Getting Net::POP3 to grab mail then forward it on.
by jlongino (Parson) on Sep 11, 2002 at 07:33 UTC
    As Kanji suggests, use Net::SMTP. I used the following code and it worked for the three messages I had in my pop3 account but I haven't extensively tested it:
    # ... use Net::SMTP; my $smtp = Net::SMTP->new(Debug => 1, # other stuff ); # ... for $msg_id (keys(%$Messages)) { print "Retrieving Msg: $msg_id\n"; my $MsgContent = $pop3->get($msg_id); # Here's where I'd like to forward it on.. $smtp->mail($resentby); $smtp->to($target); $smtp->data(); for (@$MsgContent) { $smtp->datasend($_); } $smtp->dataend(); } $smtp->quit;
    The debug mode will help pinpoint problems. If you get a "broken pipe" message, then one of your supplied arguments ($smtp->mail or $smtp->to) is most likely the culprit.

    --Jim