Я застрял при отправке электронной почты в правильном формате из 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);
?>
, пожалуйста, помогите
Для 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
Необходимо просто использовать почтовую функцию PHP, которую сценарий уже пытается сделать. Ищите синтаксис для почтовой функции, и Вы будете видеть, что существует дополнительный $headers параметра. Сценарий на самом деле создает эти заголовки, но не использует их. Заголовки необходимы, чтобы сказать Ваш почтовый клиент, который, что следует, HTML и не простой текст.
то, что крон может отправить свой вывод в адрес электронной почты, не релевантно, и Вы не должны полагаться на него. Системные администраторы могут использовать это средство как последнее прибежище, чтобы быть уверенными, что на любой неожиданный вывод от задания крона обращают их внимание. Это никогда не предназначалось как законченное почтовое средство такой, как предлагается PHP.