使用正确的格式从 cron 发送电子邮件

使用正确的格式从 cron 发送电子邮件

当我从执行从数据库获取记录的脚本的cron作业以正确的格式发送电子邮件时,我遇到了困难。phpmysql

我有一个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("[email protected]",$subject,$message); 

我通过输入类似以下内容来设置我的 cron 作业

crontab -e   //which opens `VI` editor

我在那里设置

MAILTO="[email protected]"
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 以从下午 1 点到晚上 11 点发送电子邮件。

我的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);
?>

请帮忙

答案1

您应该只使用 PHP 邮件功能,您的脚本已经尝试执行该功能。查找邮件功能的语法,您将看到有一个附加参数 $headers。该脚本实际上构造了这些标头,但并未使用它们。标头是必需的,用于告诉您的电子邮件客户端后面的内容是 HTML 而不是纯文本。cron
可以将其输出发送到电子邮件地址这一事实并不重要,您不应依赖它。系统管理员可以将此功能作为最后的手段,以确保 cron 作业的任何意外输出都会引起他们的注意。它从来都不是像 PHP 提供的一样成熟的邮件功能。

答案2

CentOs安装 cron 类型

yum install cronie  

在您的 php 脚本中,将 $header 的标题部分放在分配 $msg 上方,以便html在真正分配 $msg 之前将其作为内容拦截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

打开VI

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

按下ESC然后从键盘capsLock ON输入你就完成了ZZ

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

相关内容