Markus**: [Perl] Net::SMTP_auth

Hallo Forum...
Ich versuche via Script Mail per SMTP über gmx zu versenden.
Lokal funktioniert das auch alles prima, auf beim Provider (Domainfactory) hochgeladen jedoch: "Fehlanzeige".

Nach einiger Analyse stoße ich darauf, dass sich das Script auf dem Server des Providers hier ein wenig anders verhält:

$smtp = Net::SMTP_auth -> new ("smtp.gmx.net", Hello => 'localhost', Timeout => 30) or print DATA "kann nicht connecten! $!";
#DATA ist ein Dateihandle für eine logdatei. Da der Fehler nicht eingetragen wird, geh ich davon aus, dass das Erstellen des Objekts OK ist.

$smtp->auth('LOGIN', 'myadress\@gmx.net', '*****');
#hier kann ich nichts sagen, da die auth methode nichts zurück gibt.

$smtp->mail("myadress\@gmx.net");
#hier ist das Ergebnis auf dem DF-Server NULL und bei mir am localhost 1(success).

$smtp->to($useremail);
.
.
.
Fehler im Errorlog bekomme ich keine, nur ein paar Warnungen, wenn ich -w anschalte:
Subroutine import redefined at Local/Authen/SASL.pm line 19.
Subroutine new redefined at Local/Authen/SASL.pm line 29.
Subroutine mechanism redefined at Local/Authen/SASL.pm line 49.
Subroutine callback redefined at Local/Authen/SASL.pm line 55.

hat jemand 'ne Idee, was da "faul" ist?

  1. $smtp->auth('LOGIN', 'myadress\@gmx.net', '*****');
    #hier kann ich nichts sagen, da die auth methode nichts zurück gibt.

    Lt. Doku gibt auth true/false (genauer 1 oder undef) zurück.

    $smtp->mail("myadress\@gmx.net");
    #hier ist das Ergebnis auf dem DF-Server NULL und bei mir am localhost 1(success).

    $smtp->to($useremail);
    .
    .
    .
    Fehler im Errorlog bekomme ich keine, nur ein paar Warnungen, wenn ich -w anschalte:
    Subroutine import redefined at Local/Authen/SASL.pm line 19.
    Subroutine new redefined at Local/Authen/SASL.pm line 29.
    Subroutine mechanism redefined at Local/Authen/SASL.pm line 49.
    Subroutine callback redefined at Local/Authen/SASL.pm line 55.

    Das klingt nach alten Modulen, die noch nicht "warnings-fest" sind. Evtl. ist die Version zu alt?

    Struppi.

    1. Hoi!

      Lt. Doku gibt auth true/false (genauer 1 oder undef) zurück.

      Das klingt nach alten Modulen, die noch nicht "warnings-fest" sind. Evtl. ist die Version zu alt?

      Struppi.

      Ich hab das Script in der Form bereits vergangenes Jahr mal eingesetzt und da hat es ohne probleme Funktioniert.
      Aber ich werde mal gucken ob es neue Versionen gibt.

      Danke und Gruß, Markus**

    2. Lt. Doku gibt auth true/false (genauer 1 oder undef) zurück.

      So. neueste Version von SASL und SMTP_auth von CPAN geladen.
      But: It's the same shit.

      Und: auth gibt nüscht zurück, nach wie vor. sowohl lokal (wo das script einwandfrei seinen dienst tut), alsauch im www (wo das gleiche Script einfach keine Mail schicken will... ]:->)

      Mist! Hat noch jemand Ideen?

      Gruß, Markus

      1. Lt. Doku gibt auth true/false (genauer 1 oder undef) zurück.

        So. neueste Version von SASL und SMTP_auth von CPAN geladen.
        But: It's the same shit.

        Und: auth gibt nüscht zurück, nach wie vor. sowohl lokal (wo das script einwandfrei seinen dienst tut), alsauch im www (wo das gleiche Script einfach keine Mail schicken will... ]:->)

        Mist! Hat noch jemand Ideen?

        Offenbar war dein Loginversuch valide, aber das Login ist gescheitert. Du bekommst keine Rückmeldung vom fernen Server aus Sicherheitsgründen.

        Hast du mal Debug=>1 versucht?

        Hier ist der relevante Auszug eines Scriptes, das Sendmail oder SMTP-Mails versendet. Nur mal zum Zeigen, mit was man zu rechnen hat. Dabei behaupte ich noch nicht einmal, dass das Ding auch wirklich immer funzt:

          
        #	Sendmail  
        if( $self->{config}{sendmailpath} ){  
        	#	Teste ob Sendmail verfügbar.  
        	open(SM, "|".$self->{config}{sendmailpath}." -oi -t")  
        		or return( debug( D_SEND, t('Sendmail lässt sich nicht öffnen') ) );  
        	print SM $mailhead, CRLF;  
        	print SM $mailbody;  
        	close(SM);  
        }  
        else{  
        	#	Wir versuchen einen Versand mit SMTP  
        	use Net::SMTP;  
        	my $smtp;  
        	my $case=0;  
        	$smtp = Net::SMTP->new(  
        		Hello => $self->{config}{from},  
        		Timeout => 5,  
        		Debug =>1,  
        	)  
        	or $self->{config}{smtphost}  
        		and ++$case  
        		and $smtp = Net::SMTP->new(  
        			Host => $self->{config}{smtphost},  
        			Hello => $self->{config}{from},  
        			Timeout => 5,  
        			Debug =>1,  
        		)  
        	or return( debug(D_SEND, "Keine SMTP Connection") );  
        	if( $case and $self->{config}{password} ){  
        		$smtp->auth($self->{config}{user}, $self->{config}{password} );  
        		$smtp->status() < 5  
        		or do {  
        			#	Die smtp->auth Methode schlägt fehl, also dann so  
        			$smtp->datasend("AUTH LOGIN\n") or die 'auth login';  
        			$smtp->response();  
        			$smtp->datasend(encode_base64( $self->{config}{user} ) ) or die 'username';  
        			$smtp->response();  
        			$smtp->datasend(encode_base64( $self->{config}{password} ) ) or die 'password';  
        			$smtp->response();  
        			$smtp->status() < 5 or $smtp->quit and return( debug(D_SEND,'SMTP-Authorisierung fehlgeschlagen') );  
        		};  
        	}  
        	$smtp->mail( $self->{config}{from} )  
        		or $smtp->quit and return( debug(D_SEND,'SMTP-Mail-From fehlgeschlagen') );  
        	$smtp->to( $self->{config}{to} )  
        		or $smtp->quit and return( debug(D_SEND,'SMTP-Mail-To fehlgeschlagen') );  
        	$smtp->data();  
        		$smtp->datasend( $mailhead );  
        		$smtp->datasend(CRLF);  
        		$smtp->datasend( $mailbody );  
        		$smtp->datasend(CRLF);  
        	$smtp->dataend();  
        	$smtp->quit;  
        }  
        
        

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. Habe mit dem Support telefoniert.
          Die Ursache ist folgende:

          550 5.7.0 Current IP address does not match IP address of POP3 access {mp061}

          Ich dachte dass GMX zwar das "POP before SMTP" ersatzlos durch SMTP-auth ersetzt hat, das war auch mit ziemlicher Sicherheit bis vor ner Weile so, allerdings nun offenbar "Auth" UND "POP before send"

          Gruß, Markus

        2. Nun, das Problem eingegrenzt. Die Lösung war natürlich total einfach! :-/

          1	use Net::SMTP_auth;  
          2  
          3	$smtp = Net::SMTP_auth -> new ("smtp.gmx.net", Hello => 'gmx', Timeout => 30, Debug => 1) or print "kann nicht connecten! $!";  
          4	$smtp->auth('LOGIN', "markushilker\@gmx.net", '12345');  
          5	$smtp->mail("markushilker\@gmx.net");  
          6	$smtp->to("markushilker\@gmx.de");
          

          Und zwar in der Zeile 4 vom Script: Dort werden die Parameter zur Anmeldung an die auth Methode von smtp übergeben, in einfachen "ticks" (') ist der Backslash zum maskieren des @ überflüssig und führt zu einer Anmeldung mit falschen Benutzerdaten. Findet die Parameter-Angabe in " statt, ist das maskieren des @ mittels Backslash nötig.

          Bei mir lokal lief das ganze, weil das login zwar fehlschlug, aber die authentifikation des "pop before send" gegriffen hat!

          OINK... ;)

  2. hi,

    'myadress@gmx.net',

    OOPs.

    Entweder:
     "otto@example.com"

    Oder:
     'otto@example.com'

    Hooti

    --
    Quotenregelungen sind doof.
    1. hi,

      'myadress@gmx.net',

      OOPs.

      Entweder:
      "otto@example.com"

      Oder:
      'otto@example.com'

      Hooti

      Sorry dafür! Gelobe Besserung! ;-)