【问题标题】:Send Email to recipient from MYSQL after the Cronjob runCronjob 运行后从 MYSQL 向收件人发送电子邮件
【发布时间】:2018-08-28 15:35:07
【问题描述】:

我设置了一个每分钟运行一次代码的 cronjob。此代码的目标是连接到 Mysql 并将某个列更新为新值,如果该值已在数据库中存在 1 分钟。同时,我想同时向同一行中存在的电子邮件地址发送一封电子邮件。表的例子。

| id | title | status | email             |
+----+-------+--------+-------------------+
| 1  | title | 1      | email@example.com |
+----+-------+--------+-------------------+
| 2  | titl2 | 1      | email1@example.com|
+----+-------+--------+-------------------+

cron 作业运行后,表变为

| id | title | status | email             |
+----+-------+--------+-------------------+
| 1  | title | 2      | email@example.com |
+----+-------+--------+-------------------+
| 2  | titl2 | 2      | email1@example.com|
+----+-------+--------+-------------------+

此时我想向行状态变为 2 的电子邮件发送电子邮件

这是我尝试的代码。

<?php 
// Create connection
$conn = mysqli_connect('localhost', 'username', 'password', 'dbname');
// Check connection
if ($conn) {

mysqli_query($conn, "UPDATE jobs SET status = 2 WHERE created < (NOW() - INTERVAL 1 MINUTE)");
$em = mysqli_query($conn, "SELECT email FROM jobs WHERE status = '2' < DATE(NOW() - INTERVAL 1 MINUTE)");

}
mysqli_close($conn);
?>
<?
while ($row = mysqli_fetch_array($em)) {

    $from = 'email@myemail.com';
    $to = $row['email']; // The column where your e-mail was stored.
    $subject = 'Sample Form';
    $msg = 'Hello world!';
    mail($to, $subject, $msg, $from);
}
?>

【问题讨论】:

  • 为什么应该是$row_['email'] 而应该是$row['email']
  • 抱歉,这是一个小错误。该代码将电子邮件发送到所有电子邮件地址,即使是很久以前更改过的地址。我希望代码仅为状态变为 2 的新电子邮件地址发送电子邮件
  • 在更改状态之前不能发送电子邮件吗?例如:SELECT email WHERE status = 1 AND created &lt; (NOW() - INTERVAL 1 MINUTE)
  • 状态变化后发送邮件。因为电子邮件会通知帖子已被停用。 status = 1 表示激活。 status =2 表示停用
  • 我知道,我的意思是您可以在更新状态之前发送一封电子邮件。但是如果你想更新后发送电子邮件,那么...SELECT email FROM jobs WHERE status = '2' &lt; DATE(NOW() - INTERVAL 1 MINUTE)应该是SELECT email FROM jobs WHERE status = '2' AND created &lt; DATE(NOW() - INTERVAL 1 MINUTE),不是吗?

标签: php mysql email cron


【解决方案1】:

我想出了解决办法。用于获取所有电子邮件的代码,即使是那些很久以前状态 = 2 的电子邮件。

<?php 
// Create connection
$conn = mysqli_connect('localhost', 'username', 'password', 'dbname');
// Check connection
if ($conn) {

mysqli_query($conn, "UPDATE jobs SET status = 2 WHERE created < (NOW() - INTERVAL 1 MINUTE)");
    $em = mysqli_query($conn, "SELECT email, title FROM jobs WHERE status = 2 AND created BETWEEN (DATE_SUB(NOW(),INTERVAL 2 MINUTE)) AND NOW()");
}
mysqli_close($conn);?>
<?
while ($row = mysqli_fetch_array($em)) {

$from = 'email@myemail.com';
$to = $row['email']; // The column where your e-mail was stored.
$subject = 'Sample Form';
$msg = 'Hello world!';
mail($to, $subject, $msg, $from);
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 2012-05-18
    • 2017-12-05
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多