Odeslání mailu pokud SMTP vyžaduje ověření – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odeslání mailu pokud SMTP vyžaduje ověření – PHP – Fórum – Programujte.comOdeslání mailu pokud SMTP vyžaduje ověření – PHP – Fórum – Programujte.com

 

Arthurk0
Duch
29. 8. 2013   #1
-
0
-

Potřebuju ze svý stránky odeslat mail, to není složitý když není požadováno SMTP ověření. Na netu sem našel nějakou třídu,ale hlásí to chybu:


<b>Fatal error</b>: Using $this when not in object context in <b>C:\PHPDevPack\www\Denik_001\class.smtp.inc</b> on line <b>77</b><br />
 

tady je kousek zdrojáku třídy (class.smtp.inc):

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

    class smtp{

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

        public function __construct($params = array()){

            if(!defined('CRLF'))
                define('CRLF', "\r\n", TRUE);
            
            $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;
            }
        }

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

                        //$obj = new smtp($params);
77:        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);
                socket_set_timeout($this->connection, 0, 250000);

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

.

.

.

.

další funkce

}

tady kousek příkladu:

někde na začátku je:

    include('class.smtp.inc');

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

Poradí někdo? Uvítám i jiný nápad jak odeslat mail.

Nahlásit jako SPAM
IP: 77.48.172.–
liborb
~ Redaktor
+18
Guru
3. 9. 2013   #2
-
0
-

Ty funkci connect 

smtp::connect($params)

voláš jako statickou, takže tam $this není přístupné neb nemáš instanci objektu, na kterou by ukazoval.

Nahlásit jako SPAM
IP: 188.75.135.–
Arthurk0
Duch
3. 9. 2013   #3
-
0
-

#2 liborb
Děkuju,ale ještě bych poprosil o ukázku jak to má být správně,z PHP začínám.

Nahlásit jako SPAM
IP: 213.226.252.–
liborb
~ Redaktor
+18
Guru
4. 9. 2013   #4
-
0
-

Třeba takto: 

$smtp = new smtp($params);

if (($smtp->connect()) && ($smtp->send($send_params))) {

A connect samozřejmě musím taky upravit, tady jsem něco zkusil, ale samozřejmě netuším, jestli je to dobře:

public function connect($params = array()) {
	if ($this->status == SMTP_STATUS_CONNECTED)
		return(TRUE);

	$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
	socket_set_timeout($this->connection, 0, 250000);

	$greeting = $this->get_data();
	if (is_resource($this->connection)){
		$this->status = SMTP_STATUS_CONNECTED;
	        $this->auth ? $this->ehlo() : $this->helo();		
		return(TRUE);
	}
	else {
		$this->errors[] = 'Failed to connect to server: '.$errstr;
		return FALSE;
	}
}
Nahlásit jako SPAM
IP: 188.75.135.–
Arthurk0
Duch
4. 9. 2013   #5
-
0
-

Dík, první testy ukázaly že to funguje.

Nahlásit jako SPAM
IP: 77.48.172.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Java - odeslání mailu — založil Ondra

SMTP — založil Arlene

SMTP - pomoc — založil Triny

Apache SMTP — založil Franceq

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý