2010-02-17 4 views
6

Ich arbeite an einem Formular, bei dem der Benutzer sein E-Mail-Konto eingibt und auf Senden klickt, wird eine E-Mail an sein E-Mail-Konto gesendet.Senden von E-Mails mit dem Zend Framework und PHP

Ich habe alles ausgearbeitet. Nur dass es die E-Mail nicht an mein Konto sendet. Hat jemand Ideen? Gibt es eine Konfiguration, die ich weggelassen habe oder so?

Dies ist die Probe von meinem Controller:

public function retrieveemailAction(){ 

    $users = new Users(); 
    $email = $_POST['email'];     
    $view = Zend_Registry::get('view'); 

    if($users->checkEmail($_POST['email'])) { 

     // The Subject 
     $subject = "Email Test"; 

     // The message 
     $message = "this is a test";    

     // Send email 
     // Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise. 
     // Use if command to display email message status 
     if(mail($email, $subject, $message, $headers)) { 
      $view->operation = 'true'; 
     }    
    } else { 
     $view->operation = 'false'; 
    } 

    $view->render('retrieve.tpl'); 
} 
+1

Sie müssen spezielle Konfigurationen haben, wenn Sie Ihren Code auf localhost testen. –

+0

was meinst du spezielle configs? Gibt es ein Beispiel oder etwas? – Ryan

Antwort

1

Zunächst einmal ich mit Zend_Mail wechseln würde. Zweitens würde ich ein echtes Mail-Konto irgendwo auf einem SMTP-Server verwenden und davon senden. Oft gibt es Einschränkungen beim Senden vom Server selbst, aber die Verwendung eines tatsächlichen Mail-Servers behebt dies normalerweise.

26

ich Sie Zend_Mail statt mail() verwenden empfehlen. Es verarbeitet viele Dinge automatisch und funktioniert einfach großartig.

Haben Sie einen SMTP-Server? Der Versuch, E-Mails ohne eigenen SMTP-Server zu senden, kann dazu führen, dass die E-Mail nicht gesendet wird.

Dies ist, was ich für das Senden von E-Mails verwenden, mit Zend_Mail und Gmail:

In Bootstrap.php ich einen Standard-Mail-Transport zu konfigurieren:

protected function _initMail() 
{ 
    try { 
     $config = array(
      'auth' => 'login', 
      'username' => '[email protected]', 
      'password' => 'password', 
      'ssl' => 'tls', 
      'port' => 587 
     ); 

     $mailTransport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config); 
     Zend_Mail::setDefaultTransport($mailTransport); 
    } catch (Zend_Exception $e){ 
     //Do something with exception 
    } 
} 

Dann eine E-Mail ich den folgenden Code verwenden senden:

//Prepare email 
$mail = new Zend_Mail(); 
$mail->addTo($email); 
$mail->setSubject($subject); 
$mail->setBody($message); 
$mail->setFrom('[email protected]', 'User Name'); 

//Send it! 
$sent = true; 
try { 
    $mail->send(); 
} catch (Exception $e){ 
    $sent = false; 
} 

//Do stuff (display error message, log it, redirect user, etc) 
if($sent){ 
    //Mail was sent successfully. 
} else { 
    //Mail failed to send. 
} 
1

Entsprechend $mail->setBody($message); es

- $mail->setBodyText($message); ändern