0

我目前正在编写一个脚本,当受让人的通行证在 3 个月后到期时,它会向管理员发送电子邮件。但是,我现在处于瓶颈状态,因为电子邮件仅发送一封电子邮件,而不是每个受让人的预期多封电子邮件。它还应该发送今天 + 3 个月的那些(即 2013-06-02 到期的将在今天发送,并且只发送一次)。值在 db 中存储为 DATE (yyyy-mm-dd)。

我想它运行一次我应该有一个检查器与我的 sql where sendemail(db table for assignee) = 0?

我当前的数据存储在数组中吗?如果是这样,我需要 foreach() 将电子邮件发送到满足条件的每个条目?

我的数据库中有近 1000 个条目,希望上面的代码或修改后的代码不会阻塞服务器,它会在办公时间之后运行脚本。

任何专家都可以协助完善脚本或指出正确的方向吗?任何帮助都是很大的帮助!!!

谢谢

(PS.-credit to peterm in pointing me the correct direction for the email to work in the first place & Pardon me if mysql_* is deprecated.我现在不知道如何使用pdo。一旦一切正常,我可能会再次编辑它们以采用 pdo 以供将来校对)

这就是我现在所拥有的:

/execute the SQL query and return records
$result = mysql_query("SELECT * FROM tbl_lead WHERE pass_expiry = DATE(NOW() + INTERVAL      
3 MONTH)");

if (!$result) {
//handle your error
die('The query failed.');
}


//fetch tha data from the database 
while ($row = mysql_fetch_array($result))
{
$subject = $row['company_name']."'s"." work pass is expiry soon";
$emailBody = "Company: ".$row['company_name']." \n"."Comment: ".$row['comment']."   
\n"."Contact: ".$row['contact']." \n";
}


if(mail($to, $subject, $emailBody, $headers)) {
echo $emailBody;
echo 'Email sent successfully!';
} else {
echo $emailBody;
die('Failure: Email was not sent!');

}   
//close the connection
mysql_close($dbhandle);
4

1 回答 1

0

首先...你不应该使用 select *,而应该只选择你需要的列,除了你的主键,以利用索引:

//execute the SQL query and return records
$result = mysql_query("SELECT comment,company_name,contact FROM tbl_lead WHERE pass_expiry = DATE(NOW() + INTERVAL 3 MONTH)");

您也没有$to在 while 循环中进行设置,这可能可以解释为什么您只发送一封电子邮件。

于 2013-03-01T03:29:18.213 回答