0

私は現在、担当者のパスが 3 か月後に期限切れになるときに管理者に電子メールを送信するスクリプトを作成しています。ただし、電子メールは1つの電子メールのみを送信し、各担当者に意図した複数の単一の電子メールを送信しないため、現在ボトルネックになっています。また、今日 + 3 か月のものも送信する必要があります (つまり、2013 年 6 月 2 日の有効期限は今日、1 回だけ送信されます)。値は DATE (yyyy-mm-dd) として db に格納されます。

一度実行するには、sendemail(担当者のデータベーステーブルのフィールド)= 0のSQLでチェッカーが必要ですか?

現在のデータ ストアは配列内にありますか? もしそうなら、条件を満たす各エントリに電子メールを送信するために foreach() が必要ですか?

私のデータベースには1000近くのエントリがあり、上記のコードまたは修正されたコードがサーバーを詰まらせないことを願っています。これにより、営業時間後にスクリプトが実行されます。

専門家がスクリプトを完成させるのを手伝ったり、正しい方向性を教えてくれませんか? どんな助けも大きな助けです!!!

ありがとう

(PS.-最初に電子メールが機能するための正しい方向を私に指摘してくれたpetermの功績と、mysql_ *が非推奨である場合はご容赦ください。現時点で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)");

また、while ループを設定$toしていないため、メールを 1 つしか送信していない理由が説明される場合があります。

于 2013-03-01T03:29:18.213 に答える