使用Zend Framework 和 PHP发送电子邮件

6
我正在处理一个表单,当用户输入他们的电子邮件账户并点击发送时,将向他们的电子邮件账户发送一封电子邮件。
我已经做好了所有准备工作。只是它不能将电子邮件发送到我的账户。有人有什么想法吗?是我漏掉了什么配置或其他东西吗?
这是我的控制器示例:
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
如果您正在本地主机上测试代码,则需要进行特殊配置。 - Gaurav Sharma
你在问什么是特殊配置?有没有示例或者其他什么东西可以提供参考? - Ryan
4个回答

27

我建议您使用Zend_Mail而不是mail()。它会自动处理很多东西,运行得很好。

您有SMTP服务器吗?尝试在没有自己的SMTP服务器的情况下发送邮件可能会导致邮件无法发送。

这是我使用Zend_Mail和Gmail发送邮件的方法:

Bootstrap.php中,我配置了一个默认的邮件传输:

protected function _initMail()
{
    try {
        $config = array(
            'auth' => 'login',
            'username' => 'username@gmail.com',
            '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
    }
}

然后我使用以下代码发送电子邮件:

//Prepare email
$mail = new Zend_Mail();
$mail->addTo($email);
$mail->setSubject($subject);
$mail->setBody($message);
$mail->setFrom('username@gmail.com', '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
首先,我会转而使用Zend_Mail。其次,我会在某个SMTP服务器上使用真实的邮件帐户并从那里发送。很多时候,在服务器本身发送有限制,但使用实际的邮件服务器通常可以解决这个问题。

1

1
在代码行 $mail->setBody($message); 中,将其改为 $mail->setBodyText($message);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接