2016-05-23 11 views
0

Ich versuche, PEAR Mail 1.3 (von der PEAR-Site heruntergeladen) zu verwenden, um ein Kontaktformular auf einer Client-Site zu aktivieren. Aber ich erhalte: Fatal error: Call auf eine Elementfunktion send() auf einem Nicht-ObjektSchwerwiegender Fehler: Aufruf einer Memberfunktion send() für ein Nichtobjekt

Die Linie, auf der ist es hängt immer oben ist: $mail = $smtp->send($recipients, $headers, $body);

andere Threads Saw Umgang mit diesem Thema aber ich habe die Antwort (en) nicht verstanden. Etwas zum Zurückgeben des $ mail Objekts? Ich habe versucht, worüber ich gedacht habe, aber sie hatten kein Glück. Hier ist das Skript:

$host = "smtp.gmail.com"; 
$username = "[email protected]"; 
$password = "myPassword"; 
$port = "465"; 
$recipients = "[email protected]"; 

$headers = array ('From' => $email, 
    'To' => $recipients, 
    'Subject' => $subject); 
$smtp = Mail::factory('smtp', 
    array ('host' => $host, 
    'port' => $port, 
    'auth' => true, 
    'username' => $username, 
    'password' => $password)); 

$mail = new Mail; 
$mail = $smtp->send($recipients, $headers, $body); 

if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
    } else { 
    echo("<p>Message successfully sent!</p>"); 
    } 

Antwort

1

Fatal error: Call to a member function send() on a non-object

Ziemlich viel Mittel genau das, was es sagt.

send() wurde auf etwas aufgerufen, das kein Objekt war. Blick auf den Code; send() ist eine Methode, die für ein in der Variablen $smtp gespeichertes Objekt aufgerufen werden soll. PHP sagt Ihnen, dass es $smtp erwartet, ein Objekt zu sein, aber dass es tatsächlich etwas anderes war, wahrscheinlich NULL.

Wenn Sie sich die PEAR-Dokumente für PEAR Mail anschauen, wird es Ihnen sagen, was Mail::factory() zurückgeben soll, wenn alles funktioniert OK (Ein Objekt), und was es zurückgibt, wenn nicht (möglicherweise ein NULL). Also, wenn Sie var_dump($smtp); die; was sehen Sie?

würde ich die PEAR-Dokumentation sehen wirklich genau, unter welchen Umständen zu sehen es wird das erwartete Objekt nicht Rückkehr, dann Ihre Eingaben überprüfen, um zu sehen, ob irgendwelche von denen hinsichtlich der Verdacht auf, was Mail::factory() erwartet.

0

Ich bin so müde, ich erinnere mich nicht, wie ich es herausgefunden habe, aber hier ist, wie ich es behoben habe. In Anwendungen> Mamp> bin> php> php5.5.10> lib> php, fügte ich ein Verzeichnis mit dem Namen Net mit beiden SMTP.php (Net_SMTP-1.7.1) und Socket.php (Net_Socket 1.0.14), die ich von der PEAR-Website heruntergeladen habe. Erinnere dich nicht, wie ich herausgefunden habe, dass ich sie vermisste. Habe einen Serverfehler von Google bekommen, also habe ich den Port auf 587 geändert und es hat endlich funktioniert. Außerdem mussten die Berechtigungen der Dateien und Verzeichnisse behoben werden. Also, da ist es.

+0

'Net_SMTP' ist eine optionale Abhängigkeit für das' Mail'-Paket, und Sie müssen es installieren, wenn Sie 'Mail' verwenden möchten, um E-Mails über SMTP zu senden. – cweiske

Verwandte Themen