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