当使用zend框架工作发送邮件时,我得到以下错误.我还包括了我的代码


I get following error when sending a mail using zend frame work. I also included my code

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception'
with message 'Invalid controller specified (error)'  
in C:'xampp'htdocs'zend'library'Zend'Controller'Dispatcher'Standard.php:248 Stack trace:  
 #0 C:'xampp'htdocs'zend'library'Zend'Controller'Front.php(954):
    Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
 #1 C:'xampp'htdocs'zend'library'Zend'Application'Bootstrap'Bootstrap.php(97):
    Zend_Controller_Front->dispatch()
 #2 C:'xampp'htdocs'zend'library'Zend'Application.php(366): 
    Zend_Application_Bootstrap_Bootstrap->run()
 #3 C:'xampp'htdocs'intern'lc.intern'public'index.php(26):
    Zend_Application->run()
 #4 {main} Next exception 'Zend_Controller_Exception'
 with message 'Invalid controller specified (error)'
   #0 C:'xampp'htdocs'zend'library'Zend'Controller'Front.php(954):
    Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
   #1 C:'xampp'htdocs'zend'library'Zend'Application'B
     in C:'xampp'htdocs'zend'library'Zend'Controller'Plugin'Broker.php on line 336

我发送邮件的代码如下:

$mail = new Zend_Mail();
$mail->addTo('myemail@gmail.com', 'my name')
         ->setFrom('myemanil@gmail.com', 'my name')
         ->setSubject('My Subject')
         ->setBodyText('Email Body')
         ->send();

当我删除最后一行,即send()时,它工作正常,但要发送邮件,我们需要send():-P

I'm stuck here .

请帮助我……

thanks in advance

在我看来,这里发生了两件事:

  1. send()方法抛出异常。由于您没有指定$transport对象,因此它试图使用标准sendmail作为默认值。看起来你正在使用Windows。您安装了sendmail吗?在本地Windows开发环境上发送时,我也会遇到异常。也许使用基于smtp的传输进行测试?

  2. 抛出的异常正在触发错误处理程序,因此它正在寻找ErrorController::errorAction()。您看到的消息是丢失或错误放置ErrorController的结果。

想出来了

首先请更新到ZF最新的稳定分支。

作为一个快速修复,您应该尝试用以下代码替换您的代码:

$mail = new Zend_Mail();
$mail->addTo('myemail@gmail.com', 'my name')
         ->setFrom('myemanil@gmail.com', 'my name')
         ->setSubject('My Subject')
         ->setBodyText('Email Body');
$mail->send(); 

根据您使用的ZF版本,方法链可能是这里的问题。

试试这样项目示例

  $options = array(
        'auth'     => 'login',
        'username' => 'username@gmail.com',
        'password' => 'password',
        'ssl'      => 'tls',
        'port' => 587
    );
    $mailTransport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $options);
    Zend_Mail::setDefaultTransport($mailTransport);
$m = new Zend_Mail('UTF-8');
$m->setHeaderEncoding(Zend_Mime::ENCODING_BASE64);
    $m->addTo("username@gmail.com");
    $m->setFrom('username2b@gmail.com', 'username');
    $m->setSubject('usertext');
    $errortext = "report";
    $m->setBodyHtml($errortext, 'UTF-8', Zend_Mime::ENCODING_BASE64);
    $m->send();

您必须为您的应用程序设置默认传输。在编写代码的地方,在类的构造函数中,必须使用this。

function __construct() {
    $tr = new Zend_Mail_Transport_Smtp(<your smtp IP address>);
    Zend_Mail::setDefaultTransport($tr);
}

注意:与上述代码一起,请在apache服务器的php.ini文件中检查以下设置。下面的选项应该不加注释。

extension=php_openssl.dll