Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 022 322 раза!

Форум

Добро пожаловать, Гость!

Отправка почты скриптом через Планировщик

Вопросы по работе с Apache, Nginx, PHP, MySQL, Sendmail и т.д.
NEGr
Сообщения: 12
C нами: 2 года 9 мес

Непрочитанное сообщение NEGr » 24 фев 2014, 14:37

Добрый день.

Сразу хочется сказать создателю OpenServer большое спасибо.
Перешел с денвера - небо и земля.

Теперь непосредственно к сути вопроса:
Имеется php скрипт, который конектится к mysql, собирает от туда статистику, формирует письма и отправляет их.
Хочется запихнуть этот скрипт в планировщик, что собственно и пытался сделать.
Но раз уж я здесь пишу -это у меня не получилось.
В логах планировщика запуска скрипта происходит успешно.

Думал вначале что не правильно создал задание. Подсунул в задание другой скрипт - который тупо создает папку. Задание выполняется - папки создаются. Следом подсунул скрипт, который отправляет тестовое письмо. Задание выполняется- но письма не отправляются.

Собственно вопрос возможно ли запускать через планировщик скрипты которые могли бы конектится к базе и(или) отправлять письма?

P.S. на данный момент это реализованно через связку Windows Sheduler + Excel VBA. Проблема в том что все письма подписываются моим email. Что не очень хорошо.

Прошу вашей помощи, форумчане.

Добавлено спустя 1 час 16 секунд:
Да на всякий случай сама задача:
%progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\modules\php\%phpdriver%\php.ini -q -f %sitedir%\mylocalhost\BPD\notice.php

В папку с php положил файлик php.ini с абсолютными ссылками на папки с модулями расширения php. В папку sendmail также подложил файлик sendmail.ini, в котором явно указал порт и почтовый smtp сервер.

Не помогло....

kosmom
Сообщения: 17
C нами: 3 года 4 мес

Непрочитанное сообщение kosmom » 24 фев 2014, 15:52

Если скрипт дергается через http - настройте планировщик через wget
Если не дергается - значит проблема в скрипте

NEGr
Сообщения: 12
C нами: 2 года 9 мес

Непрочитанное сообщение NEGr » 25 фев 2014, 09:31

kosmom писал(а):Если скрипт дергается через http - настройте планировщик через wget
Если не дергается - значит проблема в скрипте


Скрипт отрабатывает нормально(по крайней мере из браузера).
На всякий случай вот сам скрипт:
<?
// Имя сервера базы данных
$dblocation = "xx.xx.xx.xxx";
$dbname = "XXX";
$dbuser="Xxxxx";
$dbpass="xxxxxxx";
// Число выводимых сообщений на странице
$pnumber = 10;
$sendmaile = false;
// Соединяемся с сервером
$db= @mysql_connect($dblocation,$dbuser,$dbpass);
@mysql_select_db($dbname, $db);

///функция отправки письма
function send_mail($myto,$mycc,$myfrom,$mysubject,$body,$myatt)
{
  $subject = '=?windows-1251?B?'.base64_encode($mysubject).'?=';
  $boundary = "--".md5(uniqid(time())); // генерируем разделитель
  $headers = "From: ".$myfrom."\r\n";   
  $headers .= "Return-path: <".$myfrom.">\r\n";
  $headers .= "CC: ".$mycc."\r\n"; 
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  $multipart = "--".$boundary."\r\n";
  $multipart .= "Content-type: text/plain; charset=\"windows-1251\"\r\n";
  $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  $body =  $body."\r\n\r\n";
  $myfile=$myatt;
  $myatt='=?windows-1251?B?'.base64_encode($myatt).'?=';
  $multipart .= $body;
 
  $file = '';
  if ( !empty( $myfile ) ) {
    $fp = fopen($myfile, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($myfile));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$myatt."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  $multipart .= $file."--".$boundary."--\r\n";

  if( mail($myto, $subject, $multipart, $headers) )
    return true;
  else
    return false;
}

$sql= "(select 'T' type,t.name name,day(t.date_end_plan)-day(t.date_start) kolvo,u.mail mail
        from tasks t
        join users u on u.Login=t.rs
        where t.archive='No' and t.notice='1' and (day(t.date_end_plan)-day(t.date_start))<=2 )
        Union
       (SELECT 'ST' type,st.name name,day(st.date_end_plan)-day(st.date_start) kolvo,u.mail mail
        FROM sub_tasks st
        join tasks t on t.id=st.id_task
        join users u on u.Login=t.rs
        where st.notice='1' and st.procent<>100 and (day(st.date_end_plan)-day(st.date_start))<=2) order by 4,1 desc";
$res=mysql_query($sql);
$cells = array();
$kolvo=0;
while ($row = mysql_fetch_assoc($res))
{
    $cells[]=$row;
   $kolvo=$kolvo+1;
}      
$i_s=0;
///формирование текста писем из результатов запроса
for($i=0;$i<$kolvo+1;$i++)
{   
   if($cells[$i]["mail"]<>$cells[$i+1]["mail"])
   {
      $k_t=0;
      $k_st=0;
      $myTextT="";
      $myTextST="";
      $myText="";
      for($j=$i_s;$j<$i+1;$j++)
      {
         if($cells[$j]["type"]=="T")
         {
            $myTextT=$myTextT.chr(9).$cells[$j]["name"].": ".chr(9).$cells[$j]["kolvo"]." д.\n";
            $k_t=$k_t+1;
         }
         else
         {
            $myTextST=$myTextST.chr(9).$cells[$j]["name"].": ".chr(9).$cells[$j]["kolvo"]." д.\n";
            $k_st=$k_st+1;         
         }
      }
      $myText=$myText."Количество просроченных задач и задач с заканчивающимся сроком составляет ".$k_t."шт.:\n".$myTextT.
                  "Количество просроченых подзадач и подзадач с заканчивающимсяся сроком составляет ".$k_st."шт.:\n".$myTextST;
      $MyTo = $cells[$i]["mail"];
      $myFrom="xxxxx@xxx.ru";
      send_mail($MyTo,"",$myFrom,"Напоминание о ваших задачах/подзадачах",$myText,"");//отправляем письмо   
      $i_s = $i + 1;
   }
}
?>


Так понимаю дело все-таки в том что во всех файлах ini (php, mysql, sendmail) в путях указаны переменные, а не абсолютные значения. Как я говорил, я пробовал подсовывать в папки с php,mysql, sendmail ini файлы с абсолютными путями - не помогло.

Вообще возможен ли запуск таких скриптов? Если да, то в какую сторону мне рыть?
Последний раз редактировалось NEGr 25 фев 2014, 18:04, всего редактировалось 1 раз.

kosmom
Сообщения: 17
C нами: 3 года 4 мес

Непрочитанное сообщение kosmom » 25 фев 2014, 10:08

Если через http все отрабатывает - значит отработает через wget
Ройте в эту сторону

NEGr
Сообщения: 12
C нами: 2 года 9 мес

Непрочитанное сообщение NEGr » 25 фев 2014, 11:08

kosmom писал(а):Если через http все отрабатывает - значит отработает через wget
Ройте в эту сторону


Понял. Буду читать и пробовать.
А по поводу ini файлов - нужно ли их кидать в директории с модулями и указывать в них абсолютные пути?

Добавлено спустя 26 минут 13 секунд:
Cпасибо, kosmom.
Все получилось.
Ступил поначалу про wget. Полез даже сначала его скачивать. Потом вспомнил что он мелькал в описании OpenServerа.

Просто забил в планировщик:
%progdir%\modules\wget\bin\wget.exe -q --no-cache http://xx.xx.xx.xxx/notice.php и все заработало, безо всяких дополнительных ini файлов.

NEGr
Сообщения: 12
C нами: 2 года 9 мес

Непрочитанное сообщение NEGr » 28 фев 2014, 08:01

Тему можно закрывать


Вернуться в «Модули и инструменты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя