web-dev-qa-db-fra.com

envoi d'email de cron au format correct

Je suis bloqué lors de l'envoi d'e-mails au format correct à partir de cron tâches exécutant mon script php qui récupère les enregistrements de la base de données mysql.

j'ai un script php qui récupère les enregistrements de la base de données et s'affiche au format <html> lorsque echod dans le navigateur, comme

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

dans mon script php, j'utilise mail simple () et pour envoyer des mails, j'utilise des en-têtes comme

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

mail("[email protected]",$subject,$message); 

je mets mon travail cron en tapant comme

crontab -e   //which opens `VI` editor

là je mis

MAILTO="[email protected]"
10 * * * * php /var/www/html/xyz/myfile.php

son envoi toutes les heures après 10 minutes mais le format se passe mal.il envoie des courriers dans un format comme

<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>

comment puis-je envoyer un courrier dans le format correct, comme indiqué lorsque son écho est affiché dans le navigateur? et comment puis-je configurer cron pour envoyer un courrier électronique de 13h00 à 23h00.

mon script php

<?php 
$con=mysql_connect("localhost","root","");
mysql_select_db("dbname",$con);
$to="[email protected]"
$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);
?>

s'il vous plaît aider

1
hitlooser

Pour CentOs installer le type cron

yum install cronie  

Dans votre script php, placez la section d'en-tête de $ header au-dessus de l'attribution de $ msg pour l'intercepter en tant que contenu html avant qu'il n'affecte réellement $ msg avec HTML.

$to="[email protected]"
$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

ouvre VI

MAILTO"[email protected];[email protected]"
* 1-11 * * * php /location/of /your/file/script.php 

appuyez sur ESC puis capsLock ON tapez ZZ à partir du clavier que vous avez terminé

 `crontab -l`  //u can see listed cronjob
0
black

Vous devriez simplement utiliser la fonction mail PHP, que votre script essaie déjà de faire. Recherchez la syntaxe de la fonction mail et vous verrez qu'il existe un paramètre supplémentaire $ headers. Le script construit effectivement ces en-têtes mais ne les utilise pas. Les en-têtes sont nécessaires pour indiquer à votre client de messagerie que ce qui suit est du HTML et non du texte brut.
Le fait que cron puisse envoyer sa sortie à une adresse électronique n’est pas pertinent et vous ne devez pas vous y fier. Les administrateurs système peuvent utiliser cette fonction en dernier recours pour s'assurer que toute sortie inattendue d'un travail cron est portée à leur connaissance. Il n’a jamais été conçu comme un moyen de courrier à part entière tel que celui proposé par PHP.

1
Jos