mail() ведет себя странно с Yii::app()->createAbsoluteUrl()

#php #email #yii

#php #Адрес электронной почты #yii

Вопрос:

Как createAbsoluteUrl() действует вне контроллера?

Я пытаюсь отправить ссылку по электронной почте. Эта ссылка:

  Yii::app()->createAbsoluteUrl('user/deactivate',  array('secret'=>$one->id,  deactivate_key'=>$one->delete_key))
 

этот код отлично работает в контроллере, но не работает в каталоге команд. То есть mail() не отправляет сообщение с помощью createAbsoluteUrl().

Как это исправить?

Полный код:

 class NotifyCommand extends CConsoleCommand
{

public function run()
{

    $cr = new CDbCriteria();
    $cr->condition = "delete_key = ''";

    $model2 = User::model()->findAll($cr);

    foreach ($model2 as $one) {
        $delete_key = sha1(mt_rand(10000, 99999).time()."some string");
        $one->delete_key = $delete_key;
        $one->save(false);
    }

    $model = User::model()->findAll();

    foreach ($model as $one) {
        if($one->ban == 1){

            $last = strtotime($one->last_logon);
            $now = time();
            $difference = $now - $last;
            $month_in_seconds = 60*60*24*30;

            if($difference > $month_in_seconds){

                $message = "<p>It has been more than a month since you visited our site: Sotrudnik.uz. If you want you can delete you account by clicking the button below</p>";
                $message .= "<button><a style=" text-decoration: none; color: black;" href=".Yii::app()->createAbsoluteUrl('user/deactivate',  array('secret'=>$one->id, 'deactivate_key'=>$one->delete_key)).">Deactivate Your Account</a></button>";



                $subject = "This is a subject";

                $headers  = 'MIME-Version: 1.0' . "rn";
                $headers .= 'Content-type: text/html; charset=iso-8859-1' . "rn";
                $headers .= 'From: CTI.uz' . "rn";

              mail($one->email,"Deactivate Your Account",$message, $headers);



            }

        }

    }
}
 

Комментарии:

1. какое сообщение об ошибке вы видите, если оно есть? и что появляется в электронном письме на месте этого URL?

2. cron настроен для выполнения command…so Я не вижу никакого сообщения об ошибке. Электронное письмо не приходит. Сообщение в основном должно гласить: нажмите на ссылку ниже, чтобы деактивировать свою учетную запись.

3. проверьте файл журнала консоли на наличие ошибок.

4. в коде, который вы вставили, есть опечатка после deactivate_key того, как вы открыли строковый оператор

5. @tinybyte, эта опечатка всего лишь here…my bad…in текстовый редактор это нормально

Ответ №1:

Вы не можете зависеть от createAbsoluteUrl() в cron.

Попробуйте это для создания url

 $link= $_SERVER['secureHostInfo'].'/user/deactivate?secret='.$one->id.'amp;deactivate_key='.$one->delete_key;
 $message .= CHtml::link('Click here', $link);
 

Если $_SERVER[‘secureHostInfo’] не сработал, проверьте свой путь в массиве $_SERVER.