【问题标题】:Sending email using Zend Framework and PHP使用 Zend Framework 和 PHP 发送电子邮件
【发布时间】:2011-01-17 16:44:52
【问题描述】:

我正在制作一个表单,当用户输入他们的电子邮件帐户并单击发送时,一封电子邮件将发送到他们的电子邮件帐户。

我已经解决了一切。只是它不会将电子邮件发送到我的帐户。谁有想法?有没有我遗漏的配置?

这是来自我的控制器的示例:

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');
}

【问题讨论】:

  • 如果你在 localhost 上测试你的代码,你需要做一些特殊的配置。
  • 特殊配置是什么意思?有例子吗?

标签: php email zend-framework send


【解决方案1】:

$mail->setBody($message);行中,改为$mail->setBodyText($message);

【讨论】:

    【解决方案2】:

    我建议您使用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.
    }
    

    【讨论】:

      【解决方案3】:

      ZendCast 上有一个非常有用的关于 Zend_Mail 的截屏视频 http://www.zendcasts.com/introduction-to-zend_mail/2010/02/

      【讨论】:

        【解决方案4】:

        首先我会改用 Zend_Mail。其次,我会在某处的 smtp 服务器上使用真实的邮件帐户并从那里发送。很多时候从服务器本身发送有限制,但是使用实际的邮件服务器通常可以解决这个问题。

        【讨论】:

          猜你喜欢
          • 2014-03-03
          • 2011-08-02
          • 2014-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-22
          相关资源
          最近更新 更多