php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.03.2005, 12:40  
Gast
 
Beiträge: n/a
Standard Script macht fehler

Hi...

Ich habe mir ein Script heruntergeladen, dass alle Eingaben in Textfeldern über SMTP an meine E-Mailadresse sendet.

Der Code sieht so aus:

PHP-Code:
<?php
/***************************************
** Filename.......: test.php
** Project........: SMTP Class
** Last Modified..: 30 September 2001
***************************************/

    /***************************************
    ** Include the class. The header() makes
    ** the output look lovely.
    ***************************************/
    
include('class.smtp.inc');
    
header('Content-Type: text/plain');

    
/***************************************
    ** Setup some parameters which will be 
    ** passed to the smtp::connect() call.
    ***************************************/
    
$params['host'] = '10.1.1.2';                // The smtp server host/ip
    
$params['port'] = 25;                        // The smtp server port
    
$params['helo'] = exec('hostname');            // What to use when sending the helo command. Typically, your domain/hostname
    
$params['auth'] = TRUE;                        // Whether to use basic authentication or not
    
$params['user'] = 'testuser';                // Username for authentication
    
$params['pass'] = 'testuser';                // Password for authentication

    /***************************************
    ** These parameters get passed to the 
    ** smtp->send() call.
    ***************************************/

    
$send_params['recipients']    = array('richard@[10.1.1.2]');                            // The recipients (can be multiple)
    
$send_params['headers']        = array(
                                        
'From: "Richard Heyes" <richard@[10.1.1.2]>',    // Headers
                                        
'To: richard@[10.1.1.2]''Subject: Test email'
                                       
);
    
$send_params['from']        = 'richard@[10.1.1.2]';                                    // This is used as in the MAIL FROM: cmd
                                                                                        // It should end up as the Return-Path: header
    
$send_params['body']        = '.Test email.';                                        // The body of the email


    /***************************************
    ** The code that creates the object and
    ** sends the email.
    ***************************************/

    
if(is_object($smtp smtp::connect($params)) AND $smtp->send($send_params)){
        echo 
'Email sent successfully!'."\r\n\r\n";

        
// Any recipients that failed (relaying denied for example) will be logged in the errors variable.
        
print_r($smtp->errors);

    }else{
        echo 
'Error sending mail'."\r\n\r\n";
        
        
// The reason for failure should be in the errors variable
        
print_r($smtp->errors);
    }

?>
Hier werden die einstellungen für das SMTp Konto vorgenommen... Alles klar.
Diese Datei funktionier einwandfrei.
Nun verlinkt diese Datei auf eine andere ( 'class.smtp.inc'), die wiederrum so aussieht:


PHP-Code:
<?php
/***************************************
** Filename.......: class.smtp.inc
** Project........: SMTP Class
** Version........: 1.0.5
** Last Modified..: 21 December 2001
***************************************/

    
define('SMTP_STATUS_NOT_CONNECTED'1TRUE);
    
define('SMTP_STATUS_CONNECTED'2TRUE);

    class 
smtp{

        var 
$authenticated;
        var 
$connection;
        var 
$recipients;
        var 
$headers;
        var 
$timeout;
        var 
$errors;
        var 
$status;
        var 
$body;
        var 
$from;
        var 
$host;
        var 
$port;
        var 
$helo;
        var 
$auth;
        var 
$user;
        var 
$pass;

        
/***************************************
        ** Constructor function. Arguments:
        ** $params - An assoc array of parameters:
        **
        **   host    - The hostname of the smtp server        Default: localhost
        **   port    - The port the smtp server runs on        Default: 25
        **   helo    - What to send as the HELO command        Default: localhost
        **             (typically the hostname of the
        **             machine this script runs on)
        **   auth    - Whether to use basic authentication    Default: FALSE
        **   user    - Username for authentication            Default: <blank>
        **   pass    - Password for authentication            Default: <blank>
        **   timeout - The timeout in seconds for the call    Default: 5
        **             to fsockopen()
        ***************************************/

        
function smtp($params = array()){

            if(!
defined('CRLF'))
                
define('CRLF'"\r\n"TRUE);

            
$this->authenticated    FALSE;            
            
$this->timeout            5;
            
$this->status            SMTP_STATUS_NOT_CONNECTED;
            
$this->host                'localhost';
            
$this->port                25;
            
$this->helo                'localhost';
            
$this->auth                FALSE;
            
$this->user                '';
            
$this->pass                '';
            
$this->errors           = array();

            foreach(
$params as $key => $value){
                
$this->$key $value;
            }
        }

        
/***************************************
        ** Connect function. This will, when called
        ** statically, create a new smtp object, 
        ** call the connect function (ie this function)
        ** and return it. When not called statically,
        ** it will connect to the server and send
        ** the HELO command.
        ***************************************/

        
function &connect($params = array()){

            if(!isset(
$this->status)){
                
$obj = new smtp($params);
                if(
$obj->connect()){
                    
$obj->status SMTP_STATUS_CONNECTED;
                }

                return 
$obj;

            }else{
                
$this->connection fsockopen($this->host$this->port$errno$errstr$this->timeout);
                if(
function_exists('socket_set_timeout')){
                    @
socket_set_timeout($this->connection50);
                }

                
$greeting $this->get_data();
                if(
is_resource($this->connection)){
                    return 
$this->auth $this->ehlo() : $this->helo();
                }else{
                    
$this->errors[] = 'Failed to connect to server: '.$errstr;
                    return 
FALSE;
                }
            }
        }

        
/***************************************
        ** Function which handles sending the mail.
        ** Arguments:
        ** $params    - Optional assoc array of parameters.
        **            Can contain:
        **              recipients - Indexed array of recipients
        **              from       - The from address. (used in MAIL FROM:),
        **                           this will be the return path
        **              headers    - Indexed array of headers, one header per array entry
        **              body       - The body of the email
        **            It can also contain any of the parameters from the connect()
        **            function
        ***************************************/

        
function send($params = array()){

            foreach(
$params as $key => $value){
                
$this->set($key$value);
            }

            if(
$this->is_connected()){

                
// Do we auth or not? Note the distinction between the auth variable and auth() function
                
if($this->auth AND !$this->authenticated){
                    if(!
$this->auth())
                        return 
FALSE;
                }

                
$this->mail($this->from);
                if(
is_array($this->recipients))
                    foreach(
$this->recipients as $value)
                        
$this->rcpt($value);
                else
                    
$this->rcpt($this->recipients);

                if(!
$this->data())
                    return 
FALSE;

                
// Transparency
                
$headers str_replace(CRLF.'.'CRLF.'..'trim(implode(CRLF$this->headers)));
                
$body    str_replace(CRLF.'.'CRLF.'..'$this->body);
                
$body    $body[0] == '.' '.'.$body $body;

                
$this->send_data($headers);
                
$this->send_data('');
                
$this->send_data($body);
                
$this->send_data('.');

                
$result = (substr(trim($this->get_data()), 03) === '250');
                
//$this->rset();
                
return $result;
            }else{
                
$this->errors[] = 'Not connected!';
                return 
FALSE;
            }
        }
        
        
/***************************************
        ** Function to implement HELO cmd
        ***************************************/

        
function helo(){
            if(
is_resource($this->connection)
                    AND 
$this->send_data('HELO '.$this->helo)
                    AND 
substr(trim($error $this->get_data()), 03) === '250' ){

                return 
TRUE;

            }else{
                
$this->errors[] = 'HELO command failed, output: ' trim(substr(trim($error),3));
                return 
FALSE;
            }
        }
        
        
/***************************************
        ** Function to implement EHLO cmd
        ***************************************/

        
function ehlo(){
            if(
is_resource($this->connection)
                    AND 
$this->send_data('EHLO '.$this->helo)
                    AND 
substr(trim($error $this->get_data()), 03) === '250' ){

                return 
TRUE;

            }else{
                
$this->errors[] = 'EHLO command failed, output: ' trim(substr(trim($error),3));
                return 
FALSE;
            }
        }
        
        
/***************************************
        ** Function to implement RSET cmd
        ***************************************/

        
function rset(){
            if(
is_resource($this->connection)
                    AND 
$this->send_data('RSET')
                    AND 
substr(trim($error $this->get_data()), 03) === '250' ){

                return 
TRUE;

            }else{
                
$this->errors[] = 'RSET command failed, output: ' trim(substr(trim($error),3));
                return 
FALSE;
            }
        }
        
        
/***************************************
        ** Function to implement QUIT cmd
        ***************************************/

        
function quit(){
            if(
is_resource($this->connection)
                    AND 
$this->send_data('QUIT')
                    AND 
substr(trim($error $this->get_data()), 03) === '221' ){

                
fclose($this->connection);
                
$this->status SMTP_STATUS_NOT_CONNECTED;
                return 
TRUE;

            }else{
                
$this->errors[] = 'QUIT command failed, output: ' trim(substr(trim($error),3));
                return 
FALSE;
            }
        }
        
        
/***************************************
        ** Function to implement AUTH cmd
        ***************************************/

        
function auth(){
            if(
is_resource($this->connection)
                    AND 
$this->send_data('AUTH LOGIN')
                    AND 
substr(trim($error $this->get_data()), 03) === '334'
                    
AND $this->send_data(base64_encode($this->user))            // Send username
                    
AND substr(trim($error $this->get_data()),0,3) === '334'
                    
AND $this->send_data(base64_encode($this->pass))            // Send password
                    
AND substr(trim($error $this->get_data()),0,3) === '235' ){

                
$this->authenticated TRUE;
                return 
TRUE;

            }else{
                
$this->errors[] = 'AUTH command failed: ' trim(substr(trim($error),3));
                return 
FALSE;
            }
        }

        
/***************************************
        ** Function that handles the MAIL FROM: cmd
        ***************************************/
        
        
function mail($from){

            if(
$this->is_connected()
                AND 
$this->send_data('MAIL FROM:<'.$from.'>')
                AND 
substr(trim($this->get_data()), 02) === '250' ){

                return 
TRUE;

            }else
                return 
FALSE;
        }

        
/***************************************
        ** Function that handles the RCPT TO: cmd
        ***************************************/
        
        
function rcpt($to){

            if(
$this->is_connected()
                AND 
$this->send_data('RCPT TO:<'.$to.'>')
                AND 
substr(trim($error $this->get_data()), 02) === '25' ){

                return 
TRUE;

            }else{
                
$this->errors[] = trim(substr(trim($error), 3));
                return 
FALSE;
            }
        }

        
/***************************************
        ** Function that sends the DATA cmd
        ***************************************/

        
function data(){

            if(
$this->is_connected()
                AND 
$this->send_data('DATA')
                AND 
substr(trim($error $this->get_data()), 03) === '354' ){
 
                return 
TRUE;

            }else{
                
$this->errors[] = trim(substr(trim($error), 3));
                return 
FALSE;
            }
        }

        
/***************************************
        ** Function to determine if this object
        ** is connected to the server or not.
        ***************************************/

        
function is_connected(){

            return (
is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));
        }

        
/***************************************
        ** Function to send a bit of data
        ***************************************/

        
function send_data($data){

            if(
is_resource($this->connection)){
                return 
fwrite($this->connection$data.CRLFstrlen($data)+2);
                
            }else
                return 
FALSE;
        }

        
/***************************************
        ** Function to get data.
        ***************************************/

        
function &get_data(){

            
$return '';
            
$line   '';
            
$loops  0;

            if(
is_resource($this->connection)){
                while((
strpos($returnCRLF) === FALSE OR substr($line,3,1) !== ' ') AND $loops 100){
                    
$line    fgets($this->connection512);
                    
$return .= $line;
                    
$loops++;
                }
                return 
$return;

            }else
                return 
FALSE;
        }

        
/***************************************
        ** Sets a variable
        ***************************************/
        
        
function set($var$value){

            
$this->$var $value;
            return 
TRUE;
        }

    } 
// End of class
?>
Un da ist der Wurm drinne... Wenn er nun die E-Mail verschicken will, bekomme ich folgende Fehlermeldung:

Code:
Fatal error: Using $this when not in object context in D:\apachefriends\xampp\htdocs\class.smtp.inc on line 78
Obwohl das Script mir ziemlich eindeutig erscheint, weis ich nicht mher weiter... Kann das sein das die variable $this zu viele Bezeichnungen hat? Also einen für HELO, Host usw...?

Kann mir jemand sagen wie ich vorgehen muss?
Wenn ihr euch fragen solltet warum er mein Apache Verzeichnis ausspuckt: Ich habe es auf meinem Apache laufen gelassen, damit ich weis welche Fehlermeldung er ausspuckt. Normalerweise läufts auf meinem Server.

In zeile 78 steht dieser Code:

$this->authenticated = FALSE;
$this->timeout = 5;
$this->status = SMTP_STATUS_NOT_CONNECTED;
$this->host = 'localhost';
$this->port = 25;
$this->helo = 'localhost';
$this->auth = FALSE;
$this->user = '';
$this->pass = '';
$this->errors = array();
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.03.2005, 00:11  
Erfahrener Benutzer
 
Registriert seit: 09.09.2004
Beiträge: 716
PHP-Kenntnisse:
Anfänger
Kort zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Poste bitte relevante Codeteile, oder frag beim Autor direkt nach. Du glaubst doch nicht im Ernst, dass ich mir das jetzt durchlese!!
__________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." - Linus Torvalds, 1996
Kort ist offline  
Alt 04.03.2005, 02:01  
Erfahrener Benutzer
 
Registriert seit: 14.01.2004
Beiträge: 2.543
fantast
fantast eine Nachricht über ICQ schicken
Standard Re: Script macht fehler

Zitat:
Zitat von volz
In zeile 78 steht dieser Code:

$this->authenticated = FALSE;
$this->timeout = 5;
$this->status = SMTP_STATUS_NOT_CONNECTED;
$this->host = 'localhost';
$this->port = 25;
$this->helo = 'localhost';
$this->auth = FALSE;
$this->user = '';
$this->pass = '';
$this->errors = array();
Mit Sicherheit nich, da steht garantiert nur eine dieser Zuweisungen ! Die Richtige posten !
__________________
Was ist validität?
fantast ist offline  
Alt 04.03.2005, 09:14  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.818
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. skripte machen keine fehler, nur die menschen die den schrott schreiben.

2. das beispiel und das skript funktionieren einwandfrei.

wenn $this im konstruktor nicht verfügbar ist, bedeutet das einfach, dass du die methode smtp::smtp() statisch aufgerufen hast.

$smtp = &smtp::connect(); wie im beispiel machen und dann mit $smtp -> methode() weitere methoden verwenden.

grüße
axo
axo ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php script Fehler andi PHP Tipps 2008 17 30.07.2008 18:50
Counter Script bringt Fehler Almond PHP Tipps 2006 6 13.06.2006 10:03
[Erledigt] Fehler im Code? PHP Tipps 2006 4 15.02.2006 17:53
[Erledigt] Counter script, kleiner OOP fehler? PHP-Fortgeschrittene 10 30.11.2005 22:34
Frage: Suche Fehler in diesem Script... PHP Tipps 2005-2 14 25.10.2005 19:24
[Erledigt] Relay Script PHP-Fortgeschrittene 11 01.06.2005 16:02
Bitte um Hilfe: Fehler im Script ?!? PHP Tipps 2005 6 23.05.2005 21:46
fehler im script oder fehler beim server PHP Tipps 2005 12 21.05.2005 17:04
Fehler im Script (?) - Auf Webserver funzt der Code... PHP Tipps 2005 5 09.05.2005 11:17
Fehler bei Script, welches Ordner erstellt PsychoEagle PHP Tipps 2005 3 23.04.2005 16:03
Fehler in Bild-upload Script PHP Tipps 2004-2 5 19.11.2004 14:01
Habe Fehler im Script bitte um Hilfe test022 PHP Tipps 2004-2 9 13.11.2004 17:44
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05
fehler im script PHP Tipps 2004 1 27.07.2004 21:05
[Erledigt] Wo ist der Fehler im Script (MySQL mit PHP) PHP Tipps 2004 15 27.07.2004 09:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php smtp helo exec

Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.