我是新的编程,所以我真的需要一个指导我的项目。我需要向用户发送电子邮件作为提醒,在用户输入提醒的几天前或同一天。我知道我需要一个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();
}