无法从ubuntu服务器上的cakephp shell发送电子邮件


unable to send emails from cakephp shell on ubuntu server

我无法从本地服务器上的cakephp shell接收电子邮件。

我已经设置了一个ubuntu服务器,并且report.php位于myapp/vendors/shellsreport.php包括:

<?php 
class EmailShell extends Shell {    
    function main() {
        App::import('Core', 'Controller');
        App::import('Component', 'Email');
        $this->Controller =& new Controller();
        $this->Email =& new EmailComponent(null);
        $this->Email->initialize($this->Controller);
        $this->Email->to = 'me@gmail.com';
        $this->Email->subject = 'spain';
        $this->Email->from = 'blabla <me@gmail.com>';
        $this->Email->send('test email');
        $this->out('email sent');
    }
}
?>

我可以在控制台中运行这个shell并收到'email sent'输出,但在我的收件箱中没有电子邮件。我还可以在控制器中运行类似的操作,成功地向我的电子邮件地址发送电子邮件。在这两个实例中,当email脚本运行时,在成功/不成功发送email之前,它将挂起1分钟

我很欣赏这有很多变量,但由于我能够从控制器发送电子邮件,而不是外壳,我认为这将服务器作为问题。

这可能是DNS问题-如果sendmail不是作为守护进程运行,它将为每个邮件发送事件启动。如果服务器的主机名在启动时无法通过sendmail查找/解析,它将等待DNS查找超时。最终它将继续,但每次sendmail启动时都会进行此查找。

这真是一个奇怪的情况。它居然能从控制器上工作,真是令人毛骨悚然。*nix发行版默认情况下喜欢滚动sendmail。Php将能够从控制器发送电子邮件,因为Php作为系统用户运行,通常具有Apache的权限。另一方面,Cron会获取任何调用它的人(即您)的术语,除了邮件服务器之类的东西。还有另外两千万种可能阻止cron使用sendmail的方法。

或者,嘿,那些Google SMTP设置呢::)

$this->Email->smtpOptions = array(  'port'=>'465',
                                    'timeout'=>'30',
                                    'host' => 'ssl://smtp.gmail.com',
                                    'username'=>'you@gmail.com',
                                    'password'=>'frosting',
                            );

请注意,我之前没有自己在shell中设置gmail,所以没有承诺,但这是直接从我服务器上的控制器出来的,它对我来说很好。

——$this->Email->send()实际上是在发送,还是只是没有出错?

if($this->Email->send('test email')) {
    $this->out('email sent');
} else {
    $this->out('email falled');
}

——如果它说它正在发送,它试图发送的是什么?

$this->Email->delivery = 'debug';
// Untested, but you get the idea
$mail = $this->Email->send();
$this->out($mail);

除了在app/tmp/logs/、/var/log/message、maillog、secure和Apache的服务器日志中,Cake的应用日志(如果需要,打开调试和日志)都将反映这一点。

——HTH:)