mail senden ohne mail()

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

  • mail senden ohne mail()

    Hallo,

    ich hab zu dem Thema diesen code gefunden:

    PHP-Code:
    der Aufruf


    PHP
    :--------------------------------------------------------------------------------
    $smtp = new SMTP$server$user_name$user_pass );
    $error $smtp->send( array( $HTTP_POST_VARS['target'] ), $HTTP_POST_VARS['subject'], $HTTP_POST_VARS['text'] );
    if(
    $error)echo$error;

    --------------------------------------------------------------------------------


    die 
    Klasse

    PHP
    :--------------------------------------------------------------------------------
    /**
     * class:         smtp.class.php
     * require:
     * optional:    
     * description:    class for sending mail directly throw an smtp server
     * created:        25.08.2002
     * last change:    18.09.2002
     * author:        Sven Denkert <sven.denkert@t-online.de>
     * copyright:    Sven Denkert
     * 
     * TODO:        MIME / Attachments / error-handling like pop3.class.php
     */

    if ( !isset( $_CLASS_SMTP_ ) ) {
        
    $_CLASS_SMTP_ 1;
        class 
    SMTP {
            var 
    $server "";
            var 
    $user_name "";
            var 
    $user_pass "";
            var 
    $from "anonymous@unknown.home";

            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;
            } 
        } 

    wie baue ich nun das ganze in mein Formular ein?




    LG
    Clemens

  • #2
    die klasse am besten als seperate datei, die du per include einbindest und die zeilen
    PHP-Code:
    $smtp = new SMTP$server$user_name$user_pass );
    $error $smtp->send( array( $HTTP_POST_VARS['target'] ), $HTTP_POST_VARS['subject'], $HTTP_POST_VARS['text'] );
    if(
    $error)echo $error
    in die datei die beim abschicken des formulars ausgeführt werden soll. und natürlich noch die namen im array anpassen
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Original geschrieben von mrhappiness
      die klasse am besten als seperate datei, die du per include einbindest und die zeilen
      PHP-Code:
      $smtp = new SMTP$server$user_name$user_pass );
      $error $smtp->send( array( $HTTP_POST_VARS['target'] ), $HTTP_POST_VARS['subject'], $HTTP_POST_VARS['text'] );
      if(
      $error)echo $error
      in die datei die beim abschicken des formulars ausgeführt werden soll. und natürlich noch die namen im array anpassen
      wahrscheinlich eine blöde frage aber was mache ich falsch.

      für $HTTP_POST_VARS['target'] setze ich $HTTP_POST_VARS['email'] ein da das aus der DB ausgelesen wird...

      es kommt aber u.a. der Fehler

      Warning: Undefined index: $email in D:\Eigene

      why?
      wäre sehr sehr dankbar für hilfe

      Kommentar


      • #4
        der code vielleicht noch:

        PHP-Code:
        <?php 
        include("../config.php");
        include(
        "smtp.class");

        $query="update form set antwort = 'Ja' where id = '$id'";
        mysql_query($query$db);

        //$mail="nukwieneu@nukwieneu.wiener-neustadt.at";
        //mail("$email",,"From:$mail");

        $server="smtp.gmx.at";
        $user_name="";
        $user_pass="";
        $subject="Ihre Anfrage auf [url]www.nukwieneu.wiener-neustadt.at.[/url]";

        $smtp = new SMTP$server$user_name$user_pass );
        $error $smtp->send( array( $HTTP_POST_VARS['$email'] ), $HTTP_POST_VARS['test'], $HTTP_POST_VARS['$answer'] );
        if(
        $error)echo $error;

        echo 
        "Email erfolgreich versand!";
        //header ("location: email-dank.php?nname=$nname&name=$name");
        ?>

        Kommentar


        • #5
          du kannst über $_POST bzw. $HTTP_POST_VARS nur Felder abfragen, die im formular vorhanden sind.
          als index solltest du dann 'email' nehmen und nicht '$email', da ich einfach mal behaupte, dass dein feld im formular ersteren namen hat
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            ach so!!

            aber dann hab ich schon das nächste Problem:

            ich verwende diese Mailscript anderes rum Der user trägt sich ins Kontaktformular ein, und die Daten werden in die DB eingetragen. Die können dann im CMS gesehen werden.

            Erst jetzt wird mein Mailscript aktiv - nämlich beim Retoursenden der Antwort an den User der die Frage gestellt hat.

            alles Klar?

            als eigentliche Formulardaten habe ich dann nur die Antwort, weil die anderen Daten wie eMail Adresse des User etc. stehen ja als Text da, weil sie aus der DB ausgelesen worden sind.
            Ich hoffe es hat jeder Verstanden

            Was mach ich nun? Kann ich dass dann überhaupt verwenden?

            Kommentar


            • #7
              ersetze $HTTP_POST_VARS['email'] durch $variable_oder_array_das_die_mailadresse_beinhaltet

              du liest es ja aus der Db, also hast du alles was du brauchst in irgendwelchen variablen. die musst du nur einsetzen abhängig von dem was drinsteht...
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                aha!!
                das geht schon mal

                nur jetzt legt sich das mit dem SMTP quer...


                Could not connect to smtp host : 0 : Email erfolgreich versand!

                das passt eh so oder?:
                include("smtp.class");
                aber wie muss ich die datei speichern?

                mit "<?php ?> " tags oder ohne? oder mit ganz anderen..?
                hab noch nie mit classes gearbeitet-> deswegen frag ich so penetrant blöd)*bitte-um-nachsicht*g*

                Kommentar


                • #9
                  du verwendest in der klasse php, also musst du das auch durch den interpreter jagen ( <?php und ?> ist nötig)
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    ich ahne schlimmes...

                    was heisst das?
                    Couldn't not send mail. Server response: 504 5.3.3 AUTH mechanism LOGIN not available
                    ...das der Server es nicht zulässt?

                    Kommentar


                    • #11
                      ---> heyho
                      hmm, ich krieg irgendwie die smtp.class (kann auch anders heißen) nicht includet. ich hab versucht direkt nach angabe von server etc. das einzufügen doch er gibt en error aus:
                      PHP-Code:
                      if ( !isset( $_CLASS_SMTP_ ) ) {
                          
                      $_CLASS_SMTP_ 1;
                          class 
                      SMTP {
                              var 
                      $server "http://www.web.de";
                              var 
                      $user_name "name";
                              var 
                      $user_pass "lll";
                              var 
                      $from "anonymous@unknown.home";

                              include(
                      "smtp.class");

                              var 
                      $socket;
                              var 
                      $error;

                              function 
                      SMTP$server$user_name null$user_pass null )
                              { 
                      error:
                      Parse error: parse error, unexpected T_INCLUDE, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in C:\wampp2\htdocs\smtp.php on line 23

                      zeile 23: include("smtp.class");

                      ... THX
                      ausserdem weiss ich nich ob der smtp-server richtig is
                      [font=dauphin]Die Seite für Spychos[/font]

                      Kommentar


                      • #12
                        Original geschrieben von JokerfaceHRO
                        error:
                        Parse error: parse error, unexpected T_INCLUDE, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in C:\wampp2\htdocs\smtp.php on line 23

                        zeile 23: include("smtp.class");
                        An der Stelle ist kein include erlaubt.

                        ausserdem weiss ich nich ob der smtp-server richtig is [/B]
                        Der ist falsch. SMTP Server verstehen SMTP und kein HTTP.
                        Code:
                        	web.de.	40000	MX	110  mx-ha02.web.de.
                        	web.de.	40000	MX	100  mx-ha01.web.de.

                        Kommentar


                        • #13
                          ... thx

                          ... is aber schon das nächste hinderniss: krieg ne fehlermeldung im
                          bezug auf den socket:

                          Warning: fsockopen(): php_hostconnect: connect failed in C:\wampp2\htdocs\smtp.php on line 65

                          Warning: fsockopen(): unable to connect to :25 in C:\wampp2\htdocs\smtp.php on line 65
                          Could not connect to smtp host : 10049 : Unknown Error

                          (hab schon den smtp-server geändert)

                          Zeile 65: if ( !$this->socket = fsockopen( $this->server, 25, $errno, $errstr, 20 ) )
                          [font=dauphin]Die Seite für Spychos[/font]

                          Kommentar


                          • #14
                            wozu ist ein & vor derm Funktionsname ?


                            An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                            Kommentar


                            • #15
                              MaxP0W3R
                              wozu ist ein & vor derm Funktionsname ?
                              ich verstehe nicht wo du meinst, dass
                              hier irgendwo ein & vorhanden ist ...

                              ---> smtp-server
                              PHP-Code:
                              $server="smtp://mx-ha01.web.de"
                              ich hoff so is das richtig
                              Zuletzt geändert von JokerfaceHRO; 27.03.2004, 21:57.
                              [font=dauphin]Die Seite für Spychos[/font]

                              Kommentar

                              Lädt...
                              X