如何通过Cron Job发送CodeIgniter电子邮件



我一直试图通过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文档。

相关内容

  • 没有找到相关文章

最新更新