не может отправлять электронные письма из оболочки cakephp на сервер Ubuntu - PullRequest
0 голосов
/ 28 июля 2011

Я не могу получать сообщения электронной почты из оболочки cakephp на моем локальном сервере.

Я настроил сервер Ubuntu, и report.php находится в myapp/vendors/shells.report.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');
    }

}
?>

Я могу запустить эту оболочку в консоли и получить вывод «электронная почта отправлена», но в моем почтовом ящике нет электронной почты.Я также могу запустить аналогичное действие в контроллере, который успешно отправляет письмо на мой адрес электронной почты.В обоих случаях, когда скрипт электронной почты запущен, он будет зависать на 1 минуту перед успешной / неудачной отправкой электронного письма.

Я ценю, что в нем много переменных, но так как яЯ могу отправить электронное письмо от контроллера, но не от оболочки, я предполагаю, что это устраняет сервер как проблему.

Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Это может быть проблема DNS - если sendmail не работает как демон, он будет запускаться для каждого события отправки почты.Если имя хоста вашего сервера не может быть найдено / разрешено с помощью sendmail при запуске, он будет сидеть и ждать истечения времени поиска DNS.В конце концов это будет продолжаться, но этот поиск будет происходить каждый раз при запуске sendmail.

0 голосов
/ 06 августа 2011

Это действительно странная ситуация. То, что это работает от контроллера вообще жутко. * nix дистрибутивы любят по умолчанию отправлять sendmail. Php сможет отправлять электронную почту с контроллера, потому что PHP работает как системный пользователь, обычно с разрешениями Apache. Cron, с другой стороны, собирает учетные записи всех, кто его вызывал (т. Е. Вас), за исключением таких вещей, как (quel shock!) Почтовые серверы и т. Д. А затем есть еще двадцать миллионов возможных вещей, которые могут помешать cron использовать Отправить письмо.

Или эй, как насчет этих настроек Google SMTP::)

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

Имейте в виду, я раньше не настраивал 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);

В дополнение к журналам приложений Cake (при необходимости включите отладку и ведение журнала) в журналах app / tmp / logs /, / var / log / message, maillog, secure и Apache все это будет отражать.

- HTH:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...