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

Hi Wise Monks!

I am trying to use Net::SMTP to send e-mail from a CGI script in a hosting environment (not my own server). The server (which I have control) requires authentication (naturally), and I already tested that I can use Net::SMTP from other machine (not that hosting) to connect and send e-mail through that server.

However, when I uploaded my script to the hosting environment, the connecting effort dies with the error "Unknown callback: 'authname'. (user|auth|language|pass)".

This can be incompatible module, and I can install my own module, but first I need to find out which module to install. I already installed the newest libnet (1.22) and Authen::SASL (2.11), but they did not help.

The perl version is a bit old - 5.008004 - not sure if this have any effect. BTW I don't have any power to update that.

Any idea what causing this the error? Any suggestion?

Below is the part of the code doing the connect and authentication:

if($debug) { print STDERR "going to connect to $ssph->{host}\n"; } my $smtp= Net::SMTP->new (Host=> $ssph->{host}, ($ssph->{port} ? (Port=> $ssph->{port}) : ()), ($debug ? (Debug=> 1) : ()) ) || die "open SMTP $ssph->{host}: ".$!; if($debug) { print STDERR "connected to $ssph->{host}, going to auth\ +n"; } if($ssph->{user} and $ssph->{pass}) { $smtp->auth($ssph->{user}, $ssph->{pass}) || die "at auth: ".$smtp-> +message(); } if($debug) { print STDERR "auth to $ssph->{host} successful\n"; }

This is the output:

going to connect to rinjani.parokinet.org Net::SMTP>>> Net::SMTP(2.31) Net::SMTP>>> Net::Cmd(2.29) Net::SMTP>>> Exporter(5.58) Net::SMTP>>> IO::Socket::INET(1.27) Net::SMTP>>> IO::Socket(1.28) Net::SMTP>>> IO::Handle(1.24) Net::SMTP=GLOB(0x88bdfc8)<<< 220 rinjani.parokinet.org ESMTP Postfix Net::SMTP=GLOB(0x88bdfc8)>>> EHLO localhost.localdomain Net::SMTP=GLOB(0x88bdfc8)<<< 250-rinjani.parokinet.org Net::SMTP=GLOB(0x88bdfc8)<<< 250-PIPELINING Net::SMTP=GLOB(0x88bdfc8)<<< 250-SIZE 10240000 Net::SMTP=GLOB(0x88bdfc8)<<< 250-VRFY Net::SMTP=GLOB(0x88bdfc8)<<< 250-ETRN Net::SMTP=GLOB(0x88bdfc8)<<< 250-AUTH PLAIN LOGIN Net::SMTP=GLOB(0x88bdfc8)<<< 250-AUTH=PLAIN LOGIN Net::SMTP=GLOB(0x88bdfc8)<<< 250 8BITMIME connected to rinjani.parokinet.org, going to auth

(then it died with "Unknown callback: 'authname'. (user|auth|language|pass)")

Thanks!

-- 
S P Arif Sahari Wibowo
http://www.arifsaha.com/

Replies are listed 'Best First'.
Re: Net::SMTP ==> Unknown callback
by cosmicperl (Chaplain) on May 16, 2008 at 01:35 UTC
    Hi,
      I've get a copy of smtp.pm off the server that has the problem and see what is happening when you call $smtp->auth

    Lyle
      Hi Lyle,

      It is not smtp.pm, but Net::SMTP, part of the libnet bundle. As I mentioned in the posting, I installed the newest libnet bundle (1.22) in my local hosting directory. As shown in the debugging output, it use the new Net:STMP (2.31).

      As I said in the posting, I tried the script outside the hosting and it works fine. My question is which module produce the error message, so I can replace it, if possible.

      Please read my posting again. Thanks!

      -- 
      S P Arif Sahari Wibowo
      http://www.arifsaha.com/
Re: Net::SMTP ==> Unknown callback
by arifsaha (Acolyte) on Oct 20, 2008 at 20:53 UTC
    I ended up resolved this myself sometime ago. I debugged it using ordinary multiple prints, which can be a challenge when one have neither shell access nor access to error log. I found that the culprit was Authen::SASL which loaded older - incompatible - Authen::SASL::Cyrus. I filed bug 40206 for Authen::SASL in CPAN for this issue. Thanks!
    -- 
    S P Arif Sahari Wibowo
    http://www.arifsaha.com/