我一直试图通过cron作业向我的用户发送电子邮件,但每次cron执行其职责时,我都会收到以下消息作为响应:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
我不明白那是什么,但这是代码。我希望cron作业运行
<?php
class Cron_email extends CI_Controller{
private $CI;
public function __construct(){
parent::__construct();
$this->CI =& get_instance();
$this->CI->load->model('Action');
$this->CI->load->model('Admin_db');
}
public function system_auto_calculate(){
$this->CI->load->library('email');
$site_email = $this->CI->Admin_db->get_site_email();
$get_site_name = $this->CI->Admin_db->get_site_name();
$get_site_g_name = $this->CI->Admin_db->get_site_g_name();
$get_site_g_pass = $this->CI->Admin_db->get_site_g_pass();
$current_domain = $_SERVER['SERVER_NAME'];
$config =array(
'protocol'=> 'ssmtp',
'smtp_host' => 'ssl://ssmtp.googlemail.com',
'smtp_port' => '465',
'smtp_timeout' => '7',
'smtp_user' => $get_site_g_name,
'smtp_pass' => $get_site_g_pass,
'charset' => 'utf-8',
'newline' => "rn",
'mailtype' => 'html', // or html
'validation' => FALSE); // bool whether to validate email or not
$this->CI->email->set_mailtype("html");
$this->CI->load->initialize($config);
$result = $this->CI->Admin_db->get_all_unread_message_by_limit_200();
if(is_array($result)){
foreach($result as $row){
$this->CI->email->clear();
$id = $row['id'];
$sender = $row['sender'];
$receiver = $row['reciever'];
$title = $row['title'];
$message = $row['message'];
$time = $row['time'];
$date_created = $row['date_created'];
$email_status = $row['email_status'];
/**==========================Now Send Message**/
$subject = $get_site_name.' | '.$title;
$to = $receiver;
$data['title'] = $title;
$data['message'] = $message;
// $data['link'] = $link;
// $data['link_title'] = $link_title;
$this->CI->email->from("$site_email", $get_site_name);
$this->CI->email->to($to);
$this->CI->email->subject($subject);
$body =$this->CI->load->view('master_4',$data,TRUE);
$this->CI->email->message($body);
if($this->CI->email->send()){
//set email status to send
$this->CI->Admin_db->reset_user_email_status($reciever);
}
}
}
}
}
这是我的cron作业命令
*/5 * * * * /usr/bin/curl "https://{domain.com}/Cron_email/system_auto_calculate"
我已经切换了服务器,也在不同的服务器上托管了文件,但问题仍然存在,但根据我的托管注册的支持,他们说:
我已经与技术支持团队仔细检查了这个问题。有根据日志,服务器端没有问题cPanel本身中的错误日志。问题与编码有关cron作业的脚本。
请问,我做得不好的是什么?
你怎么知道你的电子邮件没有被发送?我看到你通过Admin_db->reset_user_email_status()
重置了接收者的电子邮件状态(无论这意味着什么(,你能确认它没有完成吗?
如果发送电子邮件级别出现问题,可以使用printDebugger方法提供更多详细信息。
cron的输出似乎并不错误,因为您正在使用curl
来运行控制器,这本身应该被视为安全漏洞。如果有人知道你的网址,并且会有很多电子邮件要发送,它可能会运行几十次,你的服务器可能会被驱逐为试图同时发送太多电子邮件的服务器。
请阅读有关通过CLI运行控制器操作的CodeIgniter文档。