php脚本在使用cronjob时不使用phpmailer发送邮件,但在直接访问脚本时发送邮件
我有一个使用phpmailer发送电子邮件的脚本 这是我的剧本:php脚本在使用cronjob时不使用phpmailer发送邮件,但在直接访问脚本时发送邮件,php,email,cron,Php,Email,Cron,我有一个使用phpmailer发送电子邮件的脚本 这是我的剧本: <?PHP require "/home/websitename/public_html/new/phpMailer/class.phpmailer.php"; // Connectie script class Connection { // Configure Database Vars private $host = 'localhost'; private $username = 'u
<?PHP
require "/home/websitename/public_html/new/phpMailer/class.phpmailer.php";
// Connectie script
class Connection {
// Configure Database Vars
private $host = 'localhost';
private $username = 'username';
private $password = 'mypass';
private $db_name = 'mydbname';
public $db;
function __construct() {
// Create connection
$db = new mysqli($this->host, $this->username, $this->password, $this->db_name);
// Check connection
if ($db->connect_errno > 0) {
die('Unable to connect to the database: '.$db->connect_error);
}
$this->db = $db;
}
public function query($query) {
$db = $this->db;
$this->db->query('SET NAMES utf8');
if (!$result = $this->db->query($query)) {
die('There was an error running the query ['.$db->error.']');
} else {
return $result;
}
}
public function multi_query($query) {
$db = $this->db;
if (!$result = $this->db->multi_query($query)) {
die('There was an error running the multi query ['.$db->error.']');
} else {
return $result;
}
}
public function real_escape_string($value) {
return $this->db->real_escape_string($value);
}
public function inserted_id() {
return $this->db->insert_id;
}
}
$conn = new Connection();
$getaccounts = 'SELECT * FROM accounts WHERE verified_email = 0';
$getaccountscon = $conn->query($getaccounts);
while($getaccounts = $getaccountscon->fetch_assoc()){
$timer = strtotime($getaccounts['timer']);
$time = '1 minuut voorbij van account van '.$getaccounts['voornaam'];
$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
$mail->From = 'noreply@website.nl';
$mail->FromName = 'website.nl';
$mail->addAddress('twan@website.nl');
$mail->isHTML(true);
$mail->Subject = 'Verifieer je e-mail bij website.nl';
$mail->msgHTML($time);
if(!$mail->send())
{
echo 'Er is iets foutgegaan tijdens het verzenden van de verificatie mail';
}
}
?>
当我直接通过浏览器打开它时,它工作正常。但当我在一份工作中使用它时,我根本没有收到任何电子邮件。这是我的cronjob命令:wget-O/dev/null-quiethttps://mywebsite.nl/new/includes/checkemailverify.php >/dev/null 2>&1
是什么导致了这个问题 运行cron的用户可能与web服务器的用户不同。因此,可能存在一些未定义的环境变量,如PATH,cron无法找到
wget
。要修复路径,必须在crontab中提供完全限定路径thwget
假设您在*nix框中,以其crontab将被执行的用户身份登录。查找wget在文件系统中的位置:
DarkMax:~ yvesleborg$ which wget
/usr/local/bin/wget
DarkMax:~ yvesleborg$ ls -al /usr/local/bin/wget
lrwxr-xr-x 1 yvesleborg admin 30 27 Sep 2018 /usr/local/bin/wget -> ../Cellar/wget/1.19.5/bin/wget
请注意,wget可由系统用户执行yvesleborg
。确保它是为运行cron作业的用户提供的
然后编辑crontab
crontab -e
并将wget更改为上面得到的完全限定路径。在您的情况下,这将使您的命令:
/fully/qualified/path/to/wget -O /dev/null -quiet https://mywebsite.nl/new/includes/checkemailverify.php >/dev/null 2>&1
运行cron的用户可能与web服务器的用户不同。因此,可能存在一些未定义的环境变量,如PATH,cron无法找到
wget
。要修复路径,必须在crontab中提供完全限定路径thwget
假设您在*nix框中,以其crontab将被执行的用户身份登录。查找wget在文件系统中的位置:
DarkMax:~ yvesleborg$ which wget
/usr/local/bin/wget
DarkMax:~ yvesleborg$ ls -al /usr/local/bin/wget
lrwxr-xr-x 1 yvesleborg admin 30 27 Sep 2018 /usr/local/bin/wget -> ../Cellar/wget/1.19.5/bin/wget
请注意,wget可由系统用户执行yvesleborg
。确保它是为运行cron作业的用户提供的
然后编辑crontab
crontab -e
并将wget更改为上面得到的完全限定路径。在您的情况下,这将使您的命令:
/fully/qualified/path/to/wget -O /dev/null -quiet https://mywebsite.nl/new/includes/checkemailverify.php >/dev/null 2>&1
您是否尝试过不使用
wget
,而是通过cronjob中的php
直接调用脚本?Shell和web具有不同的属性:用户、环境和其他。@kerbholz是的,我以前尝试过,但没有结果,这就是为什么我尝试通过浏览器进行此操作。请在您的crontab中提供wget的完整路径。@YvesLeBorg您能给我一个例子吗?我对cronjobs不太熟悉。您是否尝试过不使用wget
,而是在cronjob中通过php
直接调用脚本?Shell和web具有不同的属性:用户、环境和其他。@kerbholz是的,我以前尝试过,但没有结果,这就是为什么我尝试通过浏览器进行此操作。请在您的crontab中提供wget的完整路径。@YvesLeBorg您能给我一个例子吗?我对克朗乔布斯不太熟悉。