Кроны работают, но электронная почта не отправляется

1

Я запускаю сервер PHP/MySQL и использую задания cron для периодического обновления моих клиентов, а также для отправки автоматических информационных бюллетеней, счетов-фактур и т.д. Однако он не работает, поскольку электронные письма не отправляются.

  1. Выполняются задания cron (проверены журналы).
  2. Вызов сценария через браузер приводит к отправке электронных писем.
  3. Использование SSMTP для транспорта электронной почты.
  4. Записи SPF и DKIM установлены и правильны.

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

$override_authentication = true;
require_once('../services/shared/connect.php');

$query = "SELECT * FROM 'organizations'";
$orgs = mysqli_query($database,$query);
while ($org = mysqli_fetch_array($orgs)) {

  // GENERATE EMAIL CONTENT HERE

  // Send email to all users
  $query = "SELECT 'id', 'email', 'avatar', 'gender', 'phone', 'option_textalerts' FROM 'users' WHERE 'organization' = " . $org['id'] . " AND 'option_scheduling' = 'enabled'";
  $users = mysqli_query($database, $query);
  while($user = mysqli_fetch_array($users)) {
    $message = emailGetHeader("Submit Availability for ".date('F Y', mktime(0,0,0,date('n')+1,1,date('Y'))), $user) . $body . emailGetFooter();
    $to = $user['email'];
    mail($to,"Submit Availability for ".date('F Y', mktime(0,0,0,date('n')+1,1,date('Y'))),$message,emailGetMeta('Leadsheet <[email protected]>', 'Leadsheet Automailer <[email protected]>'));

    // If enabled, sent a text alert to the phone number on their account
    if ($user['option_textalerts'] == 'availability') {
      $phone = preg_replace("/[^0-9]/", "", $user['phone']);
      $domains = array('txt.att.net', 'myboostmobile.com', 'sms.mycricket.com', 'tmomail.net', 'vtext.com');
      foreach ($domains as $domain) {
        mail($phone.'@'.$domain, "Availability Reminder",'Please submit your availability for '.date('F Y', mktime(0,0,0,date('n')+1,1,date('Y'))).' on Leadsheet', emailGetMeta('Leadsheet <[email protected]>', 'Leadsheet Automailer <[email protected]>'));
      }
    }
  }
}

mysqli_close($database);
  • 0
    Вы уверены, что ваши письма действительно отправляются? попробуйте, if( !mail(...) ) { // log error } else { // was successful } . Вы также уверены, что ваш cron работает правильно с установленными интервалами? Вы проверили журналы ошибок?
  • 1
    сам cron посылает вам по электронной почте вывод сценария? есть ли у пользователя cron разрешения> = пользователь сайта?
Показать ещё 2 комментария
Теги:
email
cron

2 ответа

0
Лучший ответ

После консультации с другом я обнаружил ответ. Механизм cron выполнял скрипт из корневого каталога, поэтому относительное имя файла в require_once не разрешалось. Добавление команды cd перед выполнением скрипта решило проблему.

0

Похоже, что вам не хватает переменной окружения. посмотрите на phpinfo() и сравните с вашей локальной средой. Кроме того, вы можете просто использовать wget для эмуляции браузера, загружающего страницу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню