отправка письма от cron в правильном формате

Я застрял при отправке электронной почты в правильном формате из cron заданий, выполняющих мой php скрипт, который извлекает записи из базы данных mysql.

У меня есть скрипт php, который выбирает записи из базы данных и отображает их в формате <html>, когда в браузере отображается

StartTime   EndTime     Count User  Count Apps
12:00:00    12:59:59      0             0
01:00:00    01:59:59      0             0
02:00:00    02:59:59      0             0
03:00:00    03:59:59      0             0
04:00:00    04:59:59      0             0
05:00:00    05:59:59      0             0
06:00:00    06:59:59      0             0
07:00:00    07:59:59      0             0
08:00:00    08:59:59      0             0

в моем php-скрипте. Я использую простой mail () и для отправки почты я использую заголовки, такие как

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

mail("someemail@example.com",$subject,$message); 

я устанавливаю свою работу cron, набирая как

crontab -e   //which opens `VI` editor

там я устанавливаю

MAILTO="someemail@example.com"
10 * * * * php /var/www/html/xyz/myfile.php

отправку почты каждый час за 10 мин но формат работает неправильно. При отправке почты в формате, подобном

<html><head><title>Count User Info TimeWise</title></head><h2>Count     User/Application in CurrentDate</h2><body><table border="3" cellspacing="2">

 <tr><th>StartTime</th><th>EndTime</th><th>Count User</th><th>Count Apps</th>
</tr><tr><td>12:00:00</td><td>12:59:59</td><td>1</td><td>1</td></tr><tr>  
<td>13:00:00</td><td>13:59:59</td><td>2</td><td>2</td></tr><tr><td>14:00:00</td>
<td>14:59:59</td><td>2</td><td>2</td></tr><tr><td>15:00:00</td><td>15:59:59</td>
<td>2</td><td>2</td></tr><tr><td>16:00:00</td><td>16:59:59</td><td>2</td><td>2</td>
</tr><tr><td>17:00:00</td><td>17:59:59</td><td>2</td><td>2</td></tr><tr> 
<td>18:00:00</td><td>18:59:59</td><td>2</td><td>2</td></tr><tr><td>19:00:00</td>
<td>19:59:59</td><td>2</td><td>2</td></tr><tr><td>20:00:00</td><td>20:59:59</td>
<td>1</td><td>1</td></tr><tr><td>21:00:00</td><td>21:59:59</td><td>0</td><td>0</td>
</tr><tr><td>22:00:00</td><td>22:59:59</td><td>0</td><td>0</td></tr></body>  
</table></html>

, как я могу отправлять почту в правильном формате, как показано, когда оно отображается в браузере? и как настроить cron на отправку электронной почты с 13:00. до 11 вечера.

мой php сценарий

<?php 
$con=mysql_connect("localhost","root","");
mysql_select_db("dbname",$con);
$to="some@example.com"
$subject = 'Count User Login And Application';

//fetch between 06:00:00 to 08:30:00   09:00:00 to 10:00:00
$date=array('06:00:00','09:00:00');
$date1=array('08:30:00','10:00:00');

$msg  = '<html><head>';
$msg .='<title>Some Title</title>';
$msg .='</head>';
$msg .='<h1>Test User</h1>';
$msg .='<table border="1" cellspacing="1">';

$msg .=  "<tr>";
$msg .=  "<th>start time</th>";
$msg .=  "<th>end time</th>";
$msg .=  "<th>Count</th>";

$count=count($date);
for($i=0;$i<$count;$i++){

$sql="SELECT count(*) AS test FROM table_name WHERE DATE_FORMAT(sys_time,'%H:%m:%i') BETWEEN DATE_FORMAT(sys_time,'$date[$i]') AND  DATE_FORMAT(sys_time,'$date1[$i]') ";
$query=mysql_query($sql);
if(!$query){
    die('could not connect'.mysql_error());}


while($row=mysql_fetch_array($query)) {

    $msg .=  "<tr>";
    $str=$row['test'];
    $subcategory = explode(',', $str);
    foreach($subcategory as $value) 
    {
        $msg .=  "<td>" . $value . "</td>";
     }
    $msg .=  "</tr>";
  } 
}
$msg .=  "</table>";      
$msg .=  "</html>";

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
mail($to, $subject, $msg);
?>

, пожалуйста, помогите

1
задан 8 July 2014 в 01:23

2 ответа

Для CentOs для установки типа

yum install cronie  

крона В сценарии PHP помещает раздел заголовка $header выше присвоения $msg для прерывания его как html, содержание перед ним действительно присваивает $msg с HTML, таким образом, это будет

$to="some@example.com"
$subject = 'Count User Login And Application';


$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
//try adding one more $headers with sender mail address and pass it as fourth     parameter in mail()

mail($to, $subject, $msg ,$headers);

crontab -l   //check wheather a cron tab for this user already runs
crontab -e   //to edit cron or new cron job

, открывает VI

MAILTO"some@example.com;othermail@example.com"
* 1-11 * * * php /location/of /your/file/script.php 

нажимают ESC тогда capsLock ON тип ZZ с клавиатуры, Вы сделаны

 `crontab -l`  //u can see listed cronjob
0
ответ дан 8 July 2014 в 01:23

Необходимо просто использовать почтовую функцию PHP, которую сценарий уже пытается сделать. Ищите синтаксис для почтовой функции, и Вы будете видеть, что существует дополнительный $headers параметра. Сценарий на самом деле создает эти заголовки, но не использует их. Заголовки необходимы, чтобы сказать Ваш почтовый клиент, который, что следует, HTML и не простой текст.
то, что крон может отправить свой вывод в адрес электронной почты, не релевантно, и Вы не должны полагаться на него. Системные администраторы могут использовать это средство как последнее прибежище, чтобы быть уверенными, что на любой неожиданный вывод от задания крона обращают их внимание. Это никогда не предназначалось как законченное почтовое средство такой, как предлагается PHP.

1
ответ дан 8 July 2014 в 01:23

Другие вопросы по тегам:

Похожие вопросы: