Я запускаю сервер PHP/MySQL и использую задания cron для периодического обновления моих клиентов, а также для отправки автоматических информационных бюллетеней, счетов-фактур и т.д. Однако он не работает, поскольку электронные письма не отправляются.
Я не могу понять, что происходит не так. Вот псевдокод сценария электронной почты:
$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);
После консультации с другом я обнаружил ответ. Механизм cron выполнял скрипт из корневого каталога, поэтому относительное имя файла в require_once
не разрешалось. Добавление команды cd
перед выполнением скрипта решило проблему.
Похоже, что вам не хватает переменной окружения. посмотрите на phpinfo() и сравните с вашей локальной средой. Кроме того, вы можете просто использовать wget для эмуляции браузера, загружающего страницу.
if( !mail(...) ) { // log error } else { // was successful }
. Вы также уверены, что ваш cron работает правильно с установленными интервалами? Вы проверили журналы ошибок?