向学习者发送提醒电子邮件和管理员

时间:2019-05-28 20:57:32

标签: php arrays email reminders

以下代码应向学习者发送电子邮件,但代码给我错误: “致命错误:在第46行的/home/train4/public_html/hocotest/cron-email-expire-1.php中调用未定义的方法mysqli_result :: fetch()”

我将fetch(PDO :: FETCH_OBJ)替换为fetch_object(),然后文件运行正常,没有错误,但学习者没有收到电子邮件。 这封电子邮件有2部分, 1.它将发送电子邮件给学习者 2.向管理员发送电子邮件,告知系统的系统已向其发送电子邮件。

第二部分运行正常,管理员可以收到电子邮件,但是由于第1部分无法正常工作,因此系统没有向其发送电子邮件的信息。

我尝试运行没有数组的脚本,因此系统为每门课程发送1封电子邮件,如果学习者注册了7门课程,但未完成5门课程,则他们将收到5封电子邮件。但是我只想发送一封电子邮件,其中包含所有未完成的课程详细信息。

    <?php
include 'db.php';

function check_emailaddress($email) {
    // First, we check that there is one @ symbol, and that the lengths are right
    if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email))
    {
        // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
        return false;
    }
    // Split it into sections to make life easier
    $email_array = explode("@", $email);
    $local_array = explode(".", $email_array[0]);
    for ($i = 0; $i < sizeof($local_array); $i++)
    {
        if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i]))
        {
            return false;
        }
    }
    if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1]))  // Check if domain is IP. If not, it should be valid domain name
    {
        $domain_array = explode(".", $email_array[1]);
        if (sizeof($domain_array) < 2)
        {
            return false; // Not enough parts to domain
        }
        for ($i = 0; $i < sizeof($domain_array); $i++)
        {
        if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i]))
        {
            return false;
        }
        }
    }
    return true;
}

$extraParam = "";
if (isset($_GET["ex"]) ) {
  $extraParam = $_GET["ex"]."---";
}

//get system sender email address from settings table
$srs = $db->query("SELECT adminemail, systememail FROM tbl07systemsettings");
$srow = $srs->fetch(PDO::FETCH_OBJ);
$from = $srow->systememail;    //"From: info@visiondesigngroup.ca\r\n";
$email_from = "From: $from\r\n";
$admin_email = "toralhc6@gmail.com";
$email_to = "" ;//"respite@safeguards-training.net";

$tempsql = "SELECT a06subject, a06templatebody, usetemplate FROM tbl06emailtemplates WHERE a06name = 'autoreminder'";
$rs = $db->query($tempsql);
$rowemail = $rs->fetch(PDO::FETCH_OBJ);
$usetemplate = $rowemail->usetemplate;

if ($usetemplate == 0) exit;            // not send email if course reminder email template was set not to send email *************
$email_subject = $rowemail->a06subject;
//$from = "From: info@visiondesigngroup.ca\r\n";
$eb = $rowemail->a06templatebody;

$strSQL_expire = "SELECT * FROM tbl01user, tbl04usercourses, tbl03courses
                  WHERE a01User=a04UserId AND a03CourseId=a04CourseId
                  AND DATEDIFF(CURDATE(),a04StartDate) > 0 AND a04Completion=0
                  AND a01UserRoll=0 AND a01Status=1 AND a04Status=1";
$query = $db->query($strSQL_expire) or die ("Error querying database.<br>$strSQL_expire");

$nofinish = array();
$course = "";
$pre_email = "";
$pre_fn = "";
$n = 0;
while($email_row=$query->fetch(PDO::FETCH_OBJ)){

    $fn = $email_row->a01FirstName;
    $email = $email_row->a01Email;
    $password = $email_row->a002password;

    if ($pre_email == $email){
        $course .= "web url" . $email_row->a03CourseName . "</a><br>";
        $pre_email = $email;
        $pre_fn = $fn;
        $pre_password = $password;
    }else{
        $nofinish[] = array('firstname'=>$pre_fn, 'email'=>$pre_email, 'courses'=>$course, 'password'=>$pre_password);
        $course = "web url" . $email_row->a03CourseName . "</a><br>";
        $pre_email = $email;
        $pre_fn = $fn;
        $pre_password = $password;
    }

}
$nofinish[] = array('firstname'=>$pre_fn, 'email'=>$pre_email, 'courses'=>$course, 'password'=>$pre_password);

array_shift($nofinish);


set_time_limit(600);
$eb1 = nl2br($eb);
$i = 0;

foreach($nofinish as $no){
    $email_from = $from;
    $email_address = $no['email'];

//  $email_address = "lyan3000@gmail.com";
//  if ($i++ >= 4) exit;
// need to comment the above two lines before go live***********************************************
    $email_subject = "Course Completion Reminder";

    $top = "<div style='font-family:Arial'>";
    $top .= "<div style='background-color:#045FB4; color:white;width:100%;padding:10px 10px;'><h1>Service Centre</h1></div>";

    $variable = array(
        '{$firstname}' => $no['firstname'],
        '{$course}' => $no['courses'],
        '{$password}'=> $no['password'],
        '{$email}'=> $no['email']
      );
    $email_body = strtr($eb1, $variable);

    $bottom = "<p><img src='cid:logoimg'></p>";
    $bottom .="<div style='background-color:#045FB4; height:25px;width:100%'>&nbsp;</div></div>";
    $email_message = $top . $email_body . $bottom;
/*      
    echo $email_from . "<br>"; 
    echo $email_address . "<br>";
    echo $email_subject . "<br>";
    echo $email_message;
    echo "<hr>";
*/  

    if (mail($email_address, $email_subject, $email_message, $email_from))
    {
        //echo "Reminder email sent to: " . $no['firstname'] . "<br>";
        echo "Yes. <br>";
    }else{
        //echo "Sorry, There is a mail server error. Please try it again later " . $no['firstname'] . "<br>";
        echo "No. <br>";
    }



}

$file_name = "record_for_cron_expire_email.txt";

$tz = 'EST';
$timestamp = time();
$dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string
$dt->setTimestamp($timestamp); //adjust the object to correct timestamp
$date = $dt->format('Y-m-d h:i:s A');

$text = "This script runs on $date " . PHP_EOL;
file_put_contents ( $file_name , $text, FILE_APPEND);


//send summurized email to admin
$sql = "SELECT a06subject, a06templatebody FROM tbl06emailtemplates WHERE a06name = 'remindertoadmin'";
$rs = $db->query($sql);
$row = $rs->fetch_object();
$email_subject = $row->a06subject;
//$from = "From: $email_from\r\n";
$date = date('Y-m-d');
$eb = $row->a06templatebody;

$variable = array(
    '{$learnerCourse}' => $learnercourse,
    '{$date}' => $date
  );
$email_body = strtr($eb, $variable);
mail($admin_email, $email_subject, $email_body, $email_from);

//SET inactive all expired courses
$expiredRightNow = date("Y-m-d");
$strSQL_setExpire = "UPDATE tbl04usercourses
                    SET a04Status = 0
                    WHERE a04ExpirationDate <= '$expiredRightNow'
                    AND a04Completion = 0";
$query = $db->query($strSQL_setExpire) or die ("Error querying database.<br>$strSQL_setExpire");
?>

2 个答案:

答案 0 :(得分:1)

  

mysqli_result :: fetch_all()需要MySQL本机驱动程序(mysqlnd)。

可能是您丢失了它。

看看这篇文章,可能会对您有所帮助。

mysqli fetch_all() not a valid function?

答案 1 :(得分:0)

以下是我能想到的最少的代码:         $ strSQL_expire =“ SELECT * FROM tbl01user,tbl04usercourses,tbl03courses                           在哪里a01User = a04UserId和a03CourseId = a04CourseId                           AND DATEDIFF(CURDATE(),a04StartDate)> 0 AND a04Completion = 0                           AND a01UserRoll = 0 AND a01Status = 1 AND a04Status = 1“;

    $query = $db->query($strSQL_expire) or die ("Error querying database.<br>$strSQL_expire");

    $nofinish = array();
    $course = "";
    $pre_email = "";
    $pre_fn = "";
    $n = 0;
    while($email_row=$query->fetch(PDO::FETCH_OBJ)){
        $fn = $email_row->a01FirstName;
        $email = $email_row->a01Email;
        $password = $email_row->a002password;

        if ($pre_email == $email){
            $course .= "web url" . $email_row->a03CourseName . "</a><br>";
            $pre_email = $email;
            $pre_fn = $fn;
            $pre_password = $password;
        }else{
            $nofinish[] = array('firstname'=>$pre_fn, 'email'=>$pre_email, 'courses'=>$course, 'password'=>$pre_password);
            $course = "web url" . $email_row->a03CourseName . "</a><br>";
            $pre_email = $email;
            $pre_fn = $fn;
            $pre_password = $password;
        }
    }
    $nofinish[] = array('firstname'=>$pre_fn, 'email'=>$pre_email, 'courses'=>$course, 'password'=>$pre_password);

    array_shift($nofinish);


    set_time_limit(600);
    $eb1 = nl2br($eb);
    $i = 0;

    foreach($nofinish as $no){
        $email_from = $from;
        $email_address = $no['email'];

        $email_subject = "Course Completion Reminder";

        $top = "<div style='font-family:Arial'>";
        $top .= "<div style='background-color:#045FB4; color:white;width:100%;padding:10px 10px;'><h1>Service Centre</h1></div>";

        $variable = array(
            '{$firstname}' => $no['firstname'],
            '{$course}' => $no['courses'],
            '{$password}'=> $no['password'],
            '{$email}'=> $no['email']
          );
        $email_body = strtr($eb1, $variable);

        $bottom = "<p><img src='cid:logoimg'></p>";
        $bottom .="<div style='background-color:#045FB4; height:25px;width:100%'>&nbsp;</div></div>";
        $email_message = $top . $email_body . $bottom;


        if (mail($email_address, $email_subject, $email_message, $email_from))
        {
            echo "Yes. <br>";
        }else{
            echo "No. <br>";
        }
    }
相关问题