PHP:如何使用cron job向用户发送电子邮件



我是新的编程,所以我真的需要一个指导我的项目。我需要向用户发送电子邮件作为提醒,在用户输入提醒的几天前或同一天。我知道我需要一个cron作业,以便自动发送电子邮件,但我想知道,如果我的编码是正确的,我需要添加什么,以便让cron作业知道如何发送电子邮件。我缺的太多了,谢谢你的帮助。

<?php
session_start();
error_reporting(0);
$con = mysqli_connect("localhost", "root", "", "smart_expenses_management");
if(mysqli_connect_errno()){
    echo "Unable to connect".mysqli_connect_error();
}
$con = mysqli_connect("localhost", "root", "", "smart_expenses_management");
if(mysqli_connect_errno()){
    echo "Unable to connect".mysqli_connect_error();
}
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
use PHPMailerPHPMailerSMTP;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
$current_date = date("Y-m-d");
$email = mysqli_query($con, "SELECT email FROM reminder WHERE reminder_date = '$current_date'");
$res = mysqli_query($con, "SELECT * FROM reminder WHERE reminder_date = '$current_date'");
if(isset($res))
{
    $mail = new PHPMailer(true); //create instance of phpmailer
    $mail -> isSMTP();
    $mail -> Host = 'smtp.gmail.com';
    $mail -> SMTPAuth = true;
    $mail -> Username = 'myemail@gmail.com';
    $mail -> Password = '*mypassword*';
    $mail -> SMTPSecure = 'tls';
    $mail -> Port = 587;
    $mail -> setFrom('myemail@gmail.com');
    
     $mail -> addAddress($email);   
    
    $mail -> isHTML(true);
    $mail -> Subject = "Reminder!";
    $mail -> Body = "test";
    $mail -> Send();
}

更新:我更正了代码并试图运行,我得到了这个错误信息。p/s:我已经设置了Gmail和App的密码。

Fatal error: Uncaught TypeError: trim():参数#1 ($string)必须是string类型,mysqli_result在C:xampphtdocsbelajarphpmailersrc phpmailer .php:1080 Stack trace: #0 C:xampphtdocsbelajarphpmailersrc phpmailer .php(1080): trim(Object(mysqli_result)) #1 C:xampphtdocsbelajarphpmailer phpmailersrc phpmailer .php(1014): phpmailer phpmailer ->addOrEnqueueAnAddress('to', Object(mysqli_result), ") #2 C:xampphtdocsbelajarsend_email.php(37):PHPMailerPHPMailerPHPMailer->addAddress(Object(mysqli_result)) #3 {main}抛出在C:xampphtdocsbelajar PHPMailer srcPHPMailer.php在line 1080

<?php
session_start();
$con = mysqli_connect("localhost", "root", "", "smart_expenses_management");
if(mysqli_connect_errno()){
    echo "Unable to connect".mysqli_connect_error();
}
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
use PHPMailerPHPMailerSMTP;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
$current_date = date("Y-m-d");
$email = mysqli_query($con, "SELECT email FROM reminder WHERE reminder_date = '$current_date'");
$res = mysqli_query($con, "SELECT * FROM reminder WHERE reminder_date = '$current_date'");
if(isset($res))
{
    $mail = new PHPMailer(true); //create instance of phpmailer
    $mail -> isSMTP();
    $mail -> Host = 'smtp.gmail.com';
    $mail -> SMTPAuth = true;
    $mail -> Username = 'myemail@gmail.com';
    $mail -> Password = '*mypassword*';
    $mail -> SMTPSecure = 'tls';
    $mail -> Port = 587;
    $mail -> setFrom('myemail@gmail.com');
    
    $mail -> addAddress($email);   
    
    $mail -> isHTML(true);
    $mail -> Subject = "Reminder!";
    $mail -> Body = "test";
    $mail -> Send();
}

这一行返回的是mysqli_result,而不是电子邮件。

$email = mysqli_query($con, "SELECT email FROM reminder WHERE reminder_date = '$current_date'");

您需要获取结果并获得如下值:

$result = mysqli_query($con, "SELECT email FROM reminder WHERE reminder_date = '$current_date'");
$array = mysqli_fetch_assoc($result);
$email = $array['email'];

此外,我不知道为什么你使用两个几乎相同的查询。删除这一行:

$res = mysqli_query($con, "SELECT * FROM reminder WHERE reminder_date = '$current_date'");

和替换:

if(isset($res))

:

if(isset($email) && $email)

更新如果你想向多个收件人发送通知,你需要获得所有的电子邮件地址,并将它们添加到foreach中,像这样:

<?php
session_start();
$con = mysqli_connect("localhost", "root", "", "smart_expenses_management");
if(mysqli_connect_errno()){
    echo "Unable to connect".mysqli_connect_error();
}
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
use PHPMailerPHPMailerSMTP;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
$current_date = date("Y-m-d");
$emails = array();
$result = mysqli_query($con, "SELECT email FROM reminder WHERE reminder_date = '$current_date'");
while ($row = mysqli_fetch_assoc($result)) {
    $emails[] = $row['email'];
}
if(count($emails) > 0)
{
    $mail = new PHPMailer(true); //create instance of phpmailer
    $mail -> isSMTP();
    $mail -> Host = 'smtp.gmail.com';
    $mail -> SMTPAuth = true;
    $mail -> Username = 'myemail@gmail.com';
    $mail -> Password = '*mypassword*';
    $mail -> SMTPSecure = 'tls';
    $mail -> Port = 587;
    $mail -> setFrom('myemail@gmail.com');
    
    foreach($emails as $email) {
        $mail -> addAddress($email);
    }
    $mail -> isHTML(true);
    $mail -> Subject = "Reminder!";
    $mail -> Body = "test";
    $mail -> Send();
}

相关内容

最新更新