CGI/Perl Guide | Learning Center | Forums | Advertise | Login
Site Search: in

  Main Index MAIN
INDEX
Search Posts SEARCH
POSTS
Who's Online WHO'S
ONLINE
Log in LOG
IN

Home: Perl Programming Help: Advanced: Net::SMTP::SSL Problem. [SOLVED]: Edit Log



BrentDavidson
New User

Jan 5, 2010, 6:10 PM


Views: 2004
Net::SMTP::SSL Problem. [SOLVED]

I have a server daemon that I wrote to accept a few commands from a client program, then based on those commands, run some image conversion utilities. While it's running the conversion it keeps track of any errors and then has a subroutine that is supposed to e-mail those errors to me. The subroutine looks like this:


Code
sub senderror { 
my $smtp = Net::SMTP::SSL->new($smtp_server,
Timeout=>30,
Debug=>1,
Port => 465,
Hello=>$smtp_domain) || die "Couldn't connect to smtp server $!";
if (!$smtp->auth($smtp_user,$smtp_pw)) {
print "Couldn't authenticate to SMTP Server: $!\n",$smtp->code,' : ',$smtp->message,"\n";
die;
}
$smtp->mail($smtp_sender);
$smtp->to($smtp_recip);
$smtp->data;
$smtp->datasend("To: $smtp_recip\n");
$smtp->datasend("From: $smtp_sender\n");
$smtp->datasend("Subject: Conversion Errors\n");
$smtp->datasend("\n");
$smtp->datasend("Errors:\n\n");
foreach my $err (@errors) {
$smtp->datasend($err."\n");
}
$smtp->dataend();
$smtp->quit;
return 0;
}


My problem is that when this script is running as part of the daemon I get the following output to my log file:


Code
Net::SMTP::SSL>>> Net::SMTP::SSL(1.01) 
Net::SMTP::SSL>>> IO::Socket::SSL(1.31)
Net::SMTP::SSL>>> IO::Socket::INET(1.31)
Net::SMTP::SSL>>> IO::Socket(1.31)
Net::SMTP::SSL>>> IO::Handle(1.28)
Net::SMTP::SSL>>> Exporter(5.63)
Net::SMTP::SSL>>> Net::Cmd(2.29)

(Long pause here, like 3 minutes before the next lines show up)

Net::SMTP::SSL=GLOB(0xf9dd40)<<< 220 server.redacted.com ESMTP Postfix
421 4.4.2 server.redacted.com Error: timeout exceeded
Net::SMTP::SSL=GLOB(0xf9dd40)>>> EHLO fromdomain.redacted.com


But when I copy the subroutine as it is into a test program and give it the same values for the variables as it gets in the main program it works fine.

I have tested everything to make sure that the daemon program is in fact getting the correct values before attempting the connection. To me it looks like something in the dameon program is somehow causing the Net::SMTP::SSL module to be unable to autoflush thus producing the 3 minute delay after the Net::SMTP::SSL>>> Net::Cmd(2.29) line before the timeout message appears. It's like the program is either not receiving the ESMTP Postifx line until after the server send the timeout. Like the Input is being buffered??? Is that possible?

When I run the subroutine from a standalone program it executes flawlessly and the log file has no delay.

Any ideas?


(This post was edited by BrentDavidson on Jan 6, 2010, 8:54 AM)


Edit Log:
Post edited by BrentDavidson (New User) on Jan 6, 2010, 8:54 AM


Search for (options) Powered by Gossamer Forum v.1.2.0

Web Applications & Managed Hosting Powered by Gossamer Threads
Visit our Mailing List Archives