2016-11-10 50 views
1

在警予添加其余电子邮件的建议我创建了一个文件MessengerCommand.php protected/commands下为要使用crontab的

class MessengerCommand extends CConsoleCommand 
{ 
    public function run($args) 
    { 
     /* if(ERunActions::runBackground()) 
     { */ 

     $mail=Yii::app()->Smtpmail; 
     $mail->SetFrom("[email protected]", 'From NAme'); 
     $mail->Subject ="hello"; 
     $mail->MsgHTML("haiii workd"); 
     $mail->AddAddress("[email protected]", ""); 
     if(!$mail->Send()) { 
      echo "Mailer Error: " . $mail->ErrorInfo; 
     }else { 
      echo "Message sent!"; 
     } 
} 
} 

,并添加yiic命令

$path = dirname(__FILE__); 
//echo $path; 
shell_exec($path . "/protected/yiic messenger"); 

,它会触发电子邮件当我加载该网站....

但我不想刷新该网站..我需要使这个在后台运行..请帮助我。

+0

你解决了你的问题吗? –

+0

还没有,仍然试图 – rch

+0

请看我的答案,希望它可以帮助你 –

回答

1

您可以使用yii console applications来完成你的任务:

计划的任务可以使用带的schtasks

一个示例命令行来创建。

protected/commands创建一个新的文件,Command sufix,例如:MessengerCommand.php

<?php 
class MessengerCommand extends CConsoleCommand 
{ 
....... 

在课堂MessengerCommand you have several options to create the command action。在此示例中,我们将覆盖run方法:

public function run($args) 
{ 
     $birth_month = date("m"); 
     $birth_day = date("d"); 
     $criteria = new CDbCriteria; 
     $criteria->condition = "birth_month = $birth_month and birth_day = $birth_day"; 
     $listScheduledRecords = Table::model()->findAll($criteria); 
     foreach($listScheduledRecords as $scheduled_record): 
      $this->send($scheduled_record); 
     endforeach; 
} 

public function send($scheduled_record) 
{ 
    .... 
    your logic to send your email 
    .... 
} 

protected目录,创建一个文件:messenger.php。该文件将成为命令执行:

<?php 
$path = dirname(__FILE__); 
$output = shell_exec($path . "/./yiic messenger"); 
echo $output; 

为了测试它,在Linux/Unix,在控制台/终端运行:

cd /.../.../...your_protected_path 
php messenger.php 

为了测试在Windows,你需要参考你的PHP。您的系统环境变量的exe位置路径或设置的php.exe和use yiic equivalence for Windows

调度自动任务,在此示例中,每天执行,在Linux/Unix,你可以使用cron jobs

在控制台/终端:

crontab -e 

在cron文件,添加计划任务,每天在9h00。 记住的cron sintax:本周命令

0 9 * * * php /full_path/protected/messenger.php 

保存文件并退出的月份,月,日的#分钟小时天。

在Windows上安排自动任务,refer to their docs/help on Internet

如果您有错误,Yii Console applications use their own config fileprotected/config/console.php)。常见的错误是错误的db连接,组件,模块在protected/config/console.php

+0

这是令人印象深刻的,我会尝试并给你回馈 – rch

+0

@CRajesh祝你好运,随时问任何问题 –

+0

感谢您的支持 – rch

1

相当于cron作业的窗口是一个计划任务。

schtasks /create /tn calculate /tr calc /sc weekly /d MON /st 06:05 /ru "System" 
+0

公顷,但我有一个网站在yii ..在该网站,如何设置剩余电子邮件的特定日期和触发电子邮件没有任何前端过程和在网站中只有后台进程....在yii – rch

+0

您可以通过使用Wget或CURL调用本地URL来实现。您可以下载[Wget for Windows](http://gnuwin32.sourceforge.net/packages/wget.htm) – Samay

+0

我想从mysite发送剩余电子邮件没有加载网站,我希望它运行后台没有任何行动从我的前端网站.. – rch