Problem mit Mail-Script

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Mail-Script

    Hallo,

    ichhabe hier mal ein Script gefunden, welches Mails direkt per Socket an den Mailserver schickt. Nun wollte ich es endlich mal einbauen und zum Laufen bringen, jedoch bekomme ich Fehlermeldungen und weis nicht mehr weiter. Ich habe auch noch keine großen Erfahrungen mit Socket-Funktionen.

    Hier mal das Script:

    PHP-Code:
    if ( !isset( $_CLASS_SMTP_ ) ) {
         
    $_CLASS_SMTP_ 1;
         class 
    SMTP {
             var 
    $server "mein.mailserver.de";
             var 
    $user_name "username";
             var 
    $user_pass "passwort";
             var 
    $from "test@postfach.de";
     
             var 
    $socket;
             var 
    $error;
      
            function 
    SMTP$server$user_name null$user_pass null )
             {
                 if ( !
    $this->server $server )
                     return 
    $this->error "No SMTP server provided";
                 if ( 
    trim$user_name ) )
                     
    $this->user_name trim$user_name );
                 if ( 
    trim$user_pass ) )
                     
    $this->user_pass trim$user_pass );
             }

             function &
    server_parse$response )
             {
                 
    $server_response "";
                 while ( 
    substr$server_response3) != ' ' )
                 if ( !( 
    $server_response fgets$this->socket256 ) ) )
                     return 
    $this->error "Couldn't get mail server response codes";
                 if ( 
    substr$server_response0) != $response )
                     return 
    $this->error "Couldn't not send mail. Server response: $server_response";
                 return 
    "";
             } 
     
             function &
    put$string )
             {
                 return 
    fputs$this->socket$string "\r\n" );
             } 

             
    // put in
             // mail_to => array of mailadresses, or string splittet with ,
             // cc => array of mailadresses, or string splittet with ,
             // cc => array of mailadresses, or string splittet with ,

             
    function &send$mail_to$subject$message$cc ""$bcc "" )
             { 
                 
    // Fix any bare linefeeds in the message to make it RFC821 Compliant.
                 
    $message preg_replace"/(?<!\r)\n/si""\r\n"$message ); 
                 if ( !
    trim$subject ) ) return $this->error "No email Subject specified";
                 if ( !
    trim$message ) ) return $this->error "Email message was blank"
                 if ( !
    is_array$mail_to ) ) $mail_to explode","$mail_to );
                 if ( 
    $cc && !is_array$cc ) ) $cc explode","$cc );
                 if ( 
    $bcc && !is_array$bcc ) ) $bcc explode","$bcc ); 
                 if ( !
    $this->socket fsockopen$this->server25$errno$errstr20 ) )
                     return 
    $this->error "Could not connect to smtp host : $errno : $errstr";
                 if ( 
    $this->server_parse"220" ) )
                     return 
    $this->error
                 if ( !
    $this->put"EHLO " $this->server ) )
                     return 
    $this->error "cannot send EHLO Command";
                 if ( 
    $this->server_parse"250" ) )
                     return 
    $this->error
                 if ( !empty( 
    $this->user_name ) && !empty( $this->user_pass ) ) {
                     if ( !
    $this->put"AUTH LOGIN" ) )
                         return 
    $this->error "Cannot send AUTH LOGIN Command";
                     if ( 
    $this->server_parse"334" ) )
                         return 
    $this->error;
                     if ( !
    $this->putbase64_encode$this->user_name ) ) )
                         return 
    $this->error "Cannot send LOGIN USER";
                     if ( 
    $this->server_parse"334" ) )
                         return 
    $this->error;
                     if ( !
    $this->putbase64_encode$this->user_pass ) ) )
                         return 
    $this->error "Cannot send USER PASS";
                     if ( 
    $this->server_parse"235" ) )
                         return 
    $this->error;
                 } 

                 if ( !
    $this->put"MAIL FROM: " $this->from ) )
                     return 
    $this->error "Cannot send MAIL FROM";
                 if ( 
    $this->server_parse"250" ) )
                    return 
    $this->error
                 
    $to_header "FROM: <" $this->from "> \r\n";
                 
    $to_header .= "To: ";
                 @
    reset$mail_to );
                 while ( list( , 
    $mail_to_address ) = each$mail_to ) ) {

                    
    $mail_to_address trim$mail_to_address );
                     if ( 
    preg_match'/.+@.+/'$mail_to_address ) ) {
                         
    fputs$this->socket"RCPT TO: $mail_to_address\r\n" );
                         
    $this->server_parse"250" );
                     } 
                     
    $to_header .= "$mail_to_address, ";
                 } 

                if ( !empty( 
    $bcc ) ) {
                     @
    reset$bcc );
                     while ( list( , 
    $bcc_address ) = each$bcc ) ) {
                         
    $bcc_address trim$bcc_address );
                         if ( 
    preg_match'/.+@.+/'$bcc_address ) ) {
                             
    fputs$this->socket"RCPT TO: $bcc_address\r\n" );
                             
    $this->server_parse"250" );
                         } 
                     } 
                 } 
     
                 if ( !empty( 
    $cc ) ) {
                     @
    reset$cc );
                     while ( list( , 
    $cc_address ) = each$cc ) ) {
                         
    $cc_address trim$cc_address );
                         if ( 
    preg_match'/.+@.+/'$cc_address ) ) {
                             
    fputs$this->socket"RCPT TO: $cc_address\r\n" );
                             
    $this->server_parse"250" );
                         } 
                     } 
                     
    $to_header .= "$cc_address, ";
                 } 

                 
    fputs$this->socket"DATA\r\n" ); 
                 
    $this->server_parse"354" ); 
                 
    fputs$this->socket"Subject: $subject\r\n" ); 
                 
    fputs$this->socket"$to_header\r\n" ); 
                 
    fputs$this->socket"\r\n\r\n" ); 
                 
    fputs$this->socket"$message\r\n" ); 
                 
    fputs$this->socket".\r\n" );
                 
    $this->server_parse"250" ); 
                 
    fputs$this->socket"QUIT\r\n" );
                 
    fclose$this->socket );
                 
    $this->socket null;

            } 
         } 
     }

    #----------------- Hier rufe ich die Klasse auf -----------------

    $recipients[] = "test1@empfaenger.de";
    $recipients[] = "test2@empfaenger.de";
    $recipients[] = "test3@empfaenger.de";

    $smtp = new SMTP$server$user_name$user_pass );
    $error $smtp->send( array( $recipients ), "Testmail""Dies ist ein Test" );

    if(
    $error)echo$error
    Meine erste Frage: Was gebe ich als Mailserver an? z.B. mail.meinserver.de oder muß da noch was vor, wie z.B. smtp://mail.meinserver.de?

    Ich bekomme folgende Fehlermeldung:
    Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /srv/www/htdocs/web2/html/test/smtp_mailer.php4 on line 70
    Warning: fsockopen() [function.fsockopen]: unable to connect to :25 in /srv/www/htdocs/web2/html/test/smtp_mailer.php4 on line 70
    Could not connect to smtp host : 25 : Inappropriate ioctl for device

    Kann mir da jemand weiter helfen das Dink zum Laufen zu bringen?

    Danke,
    Andi

  • #2
    Oder hat vielleicht jemand ein ganz kurzes Script - bzw. kann dieses entsprechend umschreiben.
    Ich brauche nur ein kleines Script, wass in einer While-Schleife läuft und die Mails raus haut. Der Content ändert sich jedesmal, da es eine persönliche Anrede gibt.

    Momentan mache ich das per mail() doch das dauert ewig. Habe gehört es geht um ein vielfaches schneller, wenn direkt alles zum SMTP-Server geschickt wird.

    Sollte dann irgendwie so aussehen.

    > Alle e-Mail empfänger aus DB lesen
    > Socket zu SMTP öffnen
    > In Schleife alle Mails mit pers. Anrede generieren und senden
    > Socket schließen

    Ich bräuchte eben nur den Socket-Teil zum SMTP-Server

    Grüße

    Kommentar


    • #3
      Oder hat vielleicht jemand ein ganz kurzes Script - bzw. kann dieses entsprechend umschreiben.
      HAHA! *kopfschüttel*

      Naja, gib mir die Zugangsdaten, dann kann ich dir das auch umschreiben. Sieht so aus, als ob die Daten falsch wären.

      Wird SMTP denn unterstützt?

      Kommentar


      • #4
        Wieso lachst du mich aus

        Die Zugangsdaten sind schon richtig. Sind exakt die, die ich auch in OutlookExpress verwende.
        Halt eben die Frage, ob es da als Mailserver wie erwähnt mail.server.de tut oder ob da die IP oder smpt://... eingegeben werden muß?
        Habe ich zwar alles schon probiert - aber ohne erfolg.

        Zu dem Umschreiben:
        Ich meine, die Klasse prüft ja auf Verbindungsfehler etc. Das brauche ich ja gar nicht.
        Muß auch gar keine klasse sein.

        einfach irgendwie...

        fsockopen(server, user, passwort);
        fput (empänger, subject, content, absender);
        fsockclose();

        So in der Art. Ei ich hab doch keine Ahnung. Die Beispiele im Handbuch blicke ich nicht durch. Zumindest jetzt nicht auf die Schnelle.

        Grüße

        Kommentar


        • #5
          So in der Art. Ei ich hab doch keine Ahnung. Die Beispiele im Handbuch blicke ich nicht durch. Zumindest jetzt nicht auf die Schnelle.
          Das ist definitiv die falsche Art. Das solltest auch dir klar sein. Oder schreibst du mir mal schnell ein Script, nur weil ich mich mal wieder überschätzt und selber keine Ahnung hab??? Siehste!

          Aber ich verrate dir, dass Hier im Forum eine schöne SMTP-Klasse von TBT rumgeistert, falls es nicht die ist.

          Kommentar


          • #6
            Na ich bins bist jetzt immer gewohnt, dass man hier ein paar Scriptzeilen Hilfestellung bekommt. Für jemanden, der damit schon Erfahrung hat, sind das wohl auch nur ein paar schnell getippte Zeilen Code, evtl. sogar aus der eigenen Scriptsammlung kopiert.
            Aber wenn Du nicht willst, mußt Du ja nicht.

            Aber ich bin nun genau so schlau wie vorher. Du hast mir noch nicht mal die Frage mit dem Mailserver beantworten können, was mir evtl. schon mal ein wenig Aufschluß gegeben hätte. Stattdessen klopfste hier schlaue Sprüche.


            Oder schreibst du mir mal schnell ein Script, nur weil ich mich mal wieder überschätzt und selber keine Ahnung hab???
            Ja genau! Ich denke das ist die beste Art Befehle und Syntax zu verstehen. Wozu suche ich denn Hilfe in einem Forum - eben weil ich keine Ahnung habe! Und wenn es was ist, was ich in ein paar minütchen schnell zusammengehackt habe, sollte das kein Problem sein. Wie auch andere hier schon tausendfach bewiesen haben! (Ein Dank an dieser Stelle)

            Vielleicht sieht das ja jemand genau so wie ich und erbarmt sich meinem Problem ernsthaft anzunehmen.

            Nicht für ungut.

            Grüße Andi

            Kommentar


            • #7
              Bei Pear gibt es eine SMTP Klasse mit Beschreibung . Vielleicht klappt es ja damit.

              Offe

              Kommentar


              • #8
                Aslo:

                Ja, das oben genannte Script ist das, was TBT hier irgendwann mal gepostet hat.
                Ich habe mir aus einen Scriptarchiv ein anderes SMTP-Script gezogen, auch das läuft nicht.
                Ich habe jetzt gelesen, dass es unter UNIX und SMTP Problemem geben kann und irgendwas umkonfiguriert werden muß.
                Ich habe in der PHP.ini aber keinen Eintrag zu SMTP gefunden.

                Kann mir da mal jemand weiter helfen.

                Dank & Grüße
                Andi

                Kommentar


                • #9
                  Also folgende Wert musst du haben:
                  Code:
                  Server: mail.dein-server.de
                  Benutzername: dein-Benutzername
                  Passwort: dein-Passwort
                  Port: 110
                  Und damit solltest du auch eine Verbindung zum Mail-Server aufbauen können.
                  Und wie du es mit PHP machen kannst findest du hier:
                  http://de2.php.net/manual/de/ref.imap.php
                  *winks*
                  Gilbert
                  ------------------------------------------------
                  Hilfe für eine Vielzahl von Problemen!!!
                  http://www.1st-rootserver.de/

                  Kommentar


                  • #10
                    SMTP-Port ist 25, nicht 110.
                    Habe es trotzdem probiert - erfolglos

                    Kommentar


                    • #11
                      zweifel ja immernoch daran, dass imap unterstützt wird...

                      Kommentar


                      • #12
                        andi .. wenn du es geschafft hast dann poste mal deinen erfolg ich beschäftige mich auch grad mit mime und co aber habe (kann ja auch nicht anders sein) nur misserfolge !

                        Kommentar


                        • #13
                          Naja, MIME und SMPT sind ja ganz verschiedene dinge,

                          Kommentar


                          • #14
                            stimmt schon nur ich bekomme es auch mit günni seiner klasse nicht hin !

                            er will mir einfach keine bilder anzeigen.. es kommen nur die berühmten kästchen !!

                            Kommentar


                            • #15
                              Ja woher weiß ich denn, ob IMAP unterstützt wird. Muß ich da in der php.ini was umstellen uder kann ich per Yast irgend einen diesnt installieren?

                              Alos ich habe jetzt zwei verschiedene Scripts probiert und beide bringen einen Verbindungsfehler. Also liegt es ja nahe, dass irdend ein Dinst nicht so funktioniert wie er soll.
                              Was muß ich installieren?

                              Grüße, Andi

                              Kommentar

                              Lädt...
                              X