PDA

Vollständige Version anzeigen : Zend_Mail & Exceptions


maetrus
14.05.2008, 11:24
Folgendes Szenario:


try {
$mail = new Zend_Mail ( );
$mail->setBodyText ( 'Irgend ein Text' );
$mail->setFrom ( $emailAdresse, $name );
$mail->addTo ( $emailAdresse, $name);
$mail->setSubject ($betreff);
$mail->send ();
} catch ( Exception $e ) {
var_dump($e);
die();
}
Auf meinem Webserver (online) läuft alles einwandfrei - weil da keine Warnung ausgegeben werden. Lokal auf meinem XAMPP Server bekomme ich aber folgende Warnung:

Warning: mail() [function.mail (http://localhost/reknova/login/function.mail)]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\...\library\Zend\Mail\Transport\Sendmail.php on line 91

Ich dachte das hätte ich mittels dem try & catch Block abgefangen. Es wird zwar in der Datei Sendmail.php auch eine Exception geworfen, aber ich weiß nicht wieso ich die nicht fangen kann.

(Betreffender Ausschnitt aus der Sendmail.php

if ($this->parameters === null) {
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header);
} else {
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header,
$this->parameters);
}
if (!$result) {
require_once 'Zend/Mail/Transport/Exception.php';
throw new Zend_Mail_Transport_Exception('Unable to send mail');
}
Wie fang ich nun diese Warnung mittels exceptions?

deetee
14.05.2008, 13:11
Die Warning hat nichts mit der Exception aus der Sendmail.php zu tun, sondern ist Resultat von mail().

Warnings fängt man nicht ab, man spricht dabei von unterdrücken bzw. ignorieren. Entweder per ini_set für das aktuelle Skript das error_reporting setzen oder per @mail().

maetrus
14.05.2008, 13:30
Die Warning hat nichts mit der Exception aus der Sendmail.php zu tun, sondern ist Resultat von mail().

Warnings fängt man nicht ab, man spricht dabei von unterdrücken bzw. ignorieren. Entweder per ini_set für das aktuelle Skript das error_reporting setzen oder per @mail().


Dann verrate mir bitte mal wo ich das @ hinsetzen muss bei der Schnippsel:
try {
$mail = new Zend_Mail ( );
$mail->setBodyText ( 'Irgend ein Text' );
$mail->setFrom ( $emailAdresse, $name );
$mail->addTo ( $emailAdresse, $name);
$mail->setSubject ($betreff);
$mail->send ();
} catch ( Exception $e ) {
var_dump($e);
die();
}

Die Zend Klassen mag ich nicht editieren - und an der Server Konfig rumschrauben ist auch immer doof. :(

deetee
14.05.2008, 13:35
Lies dir die Warning mal durch, da wird das Problem beschrieben.

Auf deinem online Server funktioniert es, weil dort alles richtig konfiguriert ist was mail angeht. XAMPP ist bei dir nicht für den mail Transfer konfiguriert. Wie sieht denn die Einstellung aus in deiner php.ini?

maetrus
15.05.2008, 09:13
[...] Wie sieht denn die Einstellung aus in deiner php.ini?

Woher soll ich das wissen? - Im XAMPP Ordner gibt es soviele php.inis ... :D
Für mich ist das eigentlich auch nur eine Testumgebung um lokal zu entwickeln. Getestet und in Betrieb genommen wird die Software dann auf dem Online Server ... (ich weiß - diese Vorgehensweise ist nicht gut und am besten sollte mann und frau auch automatisierte Tests schreiben).

Ich werde nun einfach mittels ini_set dann die Mail Einstellungen korrigieren. Zumindest wenn das OS Windows ist.

DennisBecker
15.05.2008, 10:08
schau mal in apache/bin/php.ini - das ist die richtige php.ini ;)

KingCrunch
15.05.2008, 10:11
Alternativ phpinfo() aufrufen.

deetee
15.05.2008, 11:51
Woher soll ich das wissen? - Im XAMPP Ordner gibt es soviele php.inis
Aber wie man phpinfo() aufruft weißt du? Da steht auch welche ini genutzt wird.

Ich werde nun einfach mittels ini_set dann die Mail Einstellungen korrigieren. Zumindest wenn das OS Windows ist.
Wenn du es kompliziert haben willst, tu das.