Отложенная отправка почты и регистрация.

// Модуль Notify
$config['module']['notify']['delayed']        = true;  // Указывает на необходимость использовать режим отложенной рассылки сообщений на email
$config['module']['notify']['insert_single']  = true;  // Если опция установлена в true, систему будет собирать записи заданий удаленной публикации, для вставки их в базу единым INSERT
$config['module']['notify']['per_process']    = 10;     // Количество отложенных заданий, обрабатываемых одним крон-процессом

Тип отправки почты mail. smtp метот не в какую не хочет работать чёрт знает почему. Использовал свой сервер почты. (С ним всё ок, скажу сразу). Добавить бы логирование отправленных почтовых сообщений, скажем так для отладки.
Однако, пока не вызвать скрипт /include/cron/notify.php письмо не будет доставлено.
Собственно я думаю письма подтверждения регистрации как в принципе и отправку писем с восстановлением пароля стоило бы отправлять наверно сразу.

Кстати, буду благодарен сообществу за помощь в написании хотя-бы тестового скрипта, который бы использовал функции отправки почты из движка. Думаю многим был бы он полезен и упростил бы жизнь. Спасибо.

4 комментария

avatar
Однако, пока не вызвать скрипт /include/cron/notify.php письмо не будет доставлено.
Ну так того… Это так и задумано. Настраиваете в кроне задачу выполнения /include/cron/notify.php раз в, скажем, пару минут…
avatar
Это собственно понятно.
Но я думаю всё-же письма регистрации можно, а к тому-же и нужно отправлять не дожидаясь запуска скрипта /include/cron/notify.php.

Попробовал я вот сделать тестовый скрипт, вроде получилось:
<?php
echo "Start
";

error_reporting(E_ALL);
ini_set('display_errors', 1);
set_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__));
chdir(dirname(__FILE__));

// Получаем объект конфигурации
require_once("./config/loader.php");
require_once(Config::Get('path.root.engine')."/classes/Engine.class.php");
require_once(Config::Get('path.root.engine').'/lib/external/phpMailer/class.phpmailer.php');
require_once(Config::Get('path.root.engine').'/lib/external/phpMailer/class.smtp.php');


$mail             = new PHPMailer();

$mail->IsSMTP();
$mail->SMTPAuth   = Config::Get('sys.mail.smtp.auth');                  // enable SMTP authentication
$mail->SMTPSecure = Config::Get('sys.mail.smtp.secure');                 // sets the prefix to the servier
$mail->Host       = Config::Get('sys.mail.smtp.host');      // sets GMAIL as the SMTP server
$mail->Port       = Config::Get('sys.mail.smtp.port');                   // set the SMTP port

$mail->Username   = Config::Get('sys.mail.smtp.user');  // GMAIL username
$mail->Password   = Config::Get('sys.mail.smtp.password');            // GMAIL password
$mail->bSmtpAuth  = Config::Get('sys.mail.smtp.auth');

$mail->From       = Config::Get('sys.mail.from_email');
$mail->FromName   = Config::Get('sys.mail.from_name');
$mail->Subject    = "This is the subject";
$mail->Body    = "This is the body when user views in plain text format"; //Text Body

$mail->AddAddress("user@company.ltd","UserName");
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message has been sent";
}
?>

И тут ошибка:
Mailer Error: The following From address failed: no-reply@company.ltd
Как-то не особо понятна суть…
В конфиге было значит так:
$config['sys']['mail']['smtp']['secure'] = 'ssl';
Оставил тут пустое значение. И опа, почта ушла!
Хм, ssl на сервере как-бы тоже работает.
Может, я в чём-то другом ошибаюсь?
avatar
А вот с $config['sys']['mail']['smtp']['secure'] = 'tls'; всё ок.
avatar
Ну так это вопрос настройки smtp, мне кажется…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.