2010-02-17 22 views
15

Ich versuche, PEAR Mail zu verwenden, um mit einem externen SMTP-Server zu senden. Es scheint für eine Weile zu hängen, dann endet das Skript. Es gibt alle meine "Echo" -Aussagen bis nach dem Senden aus. Über das Echo, das "vor dem Senden" sagt, wird nichts ausgegeben. Kann mir jemand sagen, was hier falsch ist? (Dummy-Werte ersetzen SMTP-Werte). Mail wird nicht gesendet. Danke fürs Helfen!Problem mit PHP PEAR Mail

echo "start"; 
$n = $_POST['txtName']; 
$e = $_POST['txtEmail']; 
$t = 'Kenny <[email protected]>'; 
$f = 'Kenny <[email protected]>'; 
$s = 'CPA TEST'; 
$b = "name: $n email: $e"; 

include("mail.php"); 
echo "after include"; 
/* mail setup recipients, subject etc */ 
$recipients = $t; 
$headers["From"] = $f; 
$headers["To"] = $t; 
$headers["Subject"] = $s; 
$mailmsg = $b; 
/* SMTP server name, port, user/passwd */ 
$smtpinfo["host"] = "my_smtp_host"; 
$smtpinfo["port"] = "25"; 
$smtpinfo["auth"] = true; 
$smtpinfo["username"] = "my_email"; 
$smtpinfo["password"] = "my_password"; 
echo "before object"; 
/* Create the mail object using the Mail::factory method */ 
$mail_object =& Mail::factory("smtp", $smtpinfo); 
echo "before send"; 
/* Ok send mail */ 
$send = $mail_object->send($recipients, $headers, $mailmsg); 
echo "after send"; 
if (PEAR::isError($send)) { print($send->getMessage());}else{print "end";} 
echo "done"; 

Antwort

6

Versuchen Sie dies Ihre E-Mail arbeitet, um sicherzustellen:

<?php 
require_once "Mail.php"; 

$from = "Sandra Sender <[email protected]>"; 
$to = "Ramona Recipient <[email protected]>"; 
$subject = "Hi!"; 
$body = "Hi,\n\nHow are you?"; 

$host = "mail.example.com"; 
$username = "smtp_username"; 
$password = "smtp_password"; 

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

$mail = $smtp->send($to, $headers, $body); 

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

Wenn dies nicht funktioniert, dann müssen Sie Ihre PHP-Konfiguration überprüfen.

Weitere Informationen finden Sie unter http://php.net/manual/en/function.mail.php.

+0

Danke für die Antwort Todd. – Kenny

+0

Hallo zusammen. Ich habe dein Skript getestet und es hat die gleiche Wirkung wie der "echte" Code. Es hängt, keine Warnungen, keine Fehler. Meine PHP-Konfiguration enthält error_reporting = E_ALL | E_STRICT und display_errors = Ein. Irgendwelche anderen Vorschläge? –

+1

Folgen Sie den Ratschlägen von Rap und Jayme Dunlap, indem Sie es in der Befehlszeile ausführen, um den Fehler zu sehen. –

2

Todds Skript ist ausgezeichnet, aber wird Ihr Problem nicht lösen, das ist, dass Ihr Browser das Zeitlimit überschreitet, bevor das SMTP tut. Aus diesem Grund sehen Sie nur die Hälfte Ihrer Seite und sehen keine Fehlermeldungen, mit denen Sie Ihre SMTP-Einstellungen debuggen können.

Die Lösung besteht darin, das PHP-Skript direkt auszuführen. Keine Zeitüberschreitung

Wenn Sie dies nicht tun können, weil Ihr ISP Ihnen keinen Shell-Zugriff gewährt, erstellen Sie einen Cron-Job, der jede Minute ausgeführt wird. Cron schickt Ihnen die Ausgabe per E-Mail, die vollständige Debug-Details enthält.

15

Ich stieß auf das gleiche Problem, wo es auf den Send-Befehl hing. Mein erster Schritt war, von der Kommandozeile aus zu laufen, um die vollständige Fehlermeldung zu sehen (wie Rap oben vorgeschlagen hat).

php mymailsample.php 

Es ausspucken die folgende

Warning: include_once(Net/SMTP.php): failed to open stream: No such file or directory in mail/Mail/smtp.php on line 348 
PHP Warning: include_once(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.:/usr/lib/php') in mail/Mail/smtp.php on line 348 
PHP Fatal error: Class 'Net_SMTP' not found inmail/Mail/smtp.php on line 349 

ich folgendes heruntergeladen haben, und sie in/Net

http://pear.php.net/package/Net_SMTP/download
http://pear.php.net/package/Net_Socket/download

ich die Berechtigungen des anzupassen hatte SMTP- und Socket-Bibliotheken, damit sie von Apache gelesen werden können.

Und voila, es hat funktioniert!

+10

Oder führen Sie einfach 'sudo Birne installieren Net_SMTP ', wenn Pear über die Befehlszeile ausführen kann :) –

+0

@JustinJenkins Sie Rock Mann! – mboy

1

Ich habe tatsächlich das gleiche Problem angetroffen. Ein Produktionsskript ist kaputt gegangen, und ich hatte die schwerste Zeit, es zu beheben. Vor allem, weil es so viel Code gab, der das Auftreten von Fehlern verhinderte. Letztendlich habe ich den Code von Kenny Ray verwendet, ihn für meine Umgebung modifiziert und einen Test durchgeführt. Es stellte sich heraus, dass die Net_Socket irgendwie verschwunden war. Ich habe es deinstalliert und neu installiert und alles hat wieder funktioniert. Ich hoffe das hilft dir.

47

Wenn jemand auf Linux läuft und auf das gleiche Problem wie Jayme läuft. Hier ist eine weitere einfache Lösung für die Installation der fehlenden "Net /" Klassen. Diese fehlenden Klassen führen dazu, dass das Skript unterbrochen wird.

sudo pear install Net_SMTP

+1

Das ist, was es für mich repariert hat. – smoothgrips

+0

Das war meine Lösung. Danke;) – daniherculano

+0

Das hat auch für mich funktioniert! Danke – Sahil

5

Die Neuinstallation von Kanal: //pear.php.net/Mail-1.2.0 Does'nt Arbeit für mich (Ubuntu 12..04)

Entfernen Sie einfach den caracter "&" vor neuen

sudo vi /usr/share/php/Mail/smtp.php 
    349   /*$this->_smtp = &new Net_SMTP($this->host, */ 
    350   $this->_smtp = new Net_SMTP($this->host,