PHP напоминание по электронной почте, когда поле даты за месяц до даты исполнения - PullRequest
0 голосов
/ 05 января 2010

Я пытаюсь настроить уведомление по электронной почте в качестве напоминания, чтобы сообщить мне, когда должен быть проведен осмотр транспортного средства, предпочтительно за месяц. Если дата находится за месяц до даты в контрольной таблице due_date, она должна отправить напоминание. Ваша помощь будет принята с благодарностью. Ниже приведен код php и схема MySQL, которые у меня есть:

<?php
//calling PEAR Mailer
require_once "Mail.php";
?>
<?php function connect()
{
  require('includes/config.php');
  return $conn;
}
?>
<?php
// Make a MySQL query
$query = "SELECT * FROM inspection";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result) or die(mysql_error());
$from = "Server Database <admin@server.com>";
$to = "me <me@server.com>";
//$cc = "another person <another@server.com>";
$subject = "Vehicle Inspection Reminder";
$body = "echo "The following vehicle is due for inspection:;
echo $row['vehicle'];
if (!$conn)
  {
  die('Could not connect: ' . mysql_error());
  }

?>";

$host = "mail.server.com";
$username = "username";
$password = "password";

$headers = array ('From' => $from,
  'To' => $to,
  'CC' => $cc,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Message successfully sent!</p>");
 }
?>

MySQL схема:

`CREATE TABLE IF NOT EXISTS `inspection` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `vehicle` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `last_date` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `due_date` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `vehicle` (`vehicle`,`last_date`,`due_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;`

1 Ответ

0 голосов
/ 05 января 2010

Вы на правильном пути. Единственная важная вещь, которую нужно сделать, - создать задание cron для вашего PHP-скрипта, чтобы он запускался один раз в день. Ваш сценарий должен будет проверить, устарела ли запись, и не забудьте изменить вашу схему, чтобы она содержала логическое поле «NotificationSent», чтобы не отправлять почтовые уведомления каждый день. Подробнее о работе cron: http://www.developertutorials.com/blog/php/running-php-cron-jobs-regular-scheduled-tasks-in-php-172/ Черновик сценария:

$request = "SELECT due_date, NotificationSent FROM inspection WHERE due_date>$expected_date AND (NOT NotificationSent)";
$res = mysql_query($request);
while ($somerow = mysql_fetch_assoc($request))
{
    // ... here you call your mail notification script and set NotificationSent to true for the row
}
...