2016-12-21 10 views
0

私はイントラネットで動作するシステムを持っており、actionCreateで警告メールを送信するにはどうすればいいですか?メールを送信actionCreate

私は以下のようにしましたが、電子メールは正しく送信されましたが、インターネットがオフラインの場合、不公平なエラーメッセージが表示されます。

public function actionCreate() 
    { 
     $model = new Todolist(); 

     if ($model->load(Yii::$app->request->post())) { 

      $file = $model->uploadImage(); 

      if ($model->save()) { 

       if ($file !== false) { 

        $idfolder = Yii::$app->user->identity->id; 

        if(!is_dir(\Yii::$app->getModule('task')->params['taskAttachment'])){ 
        mkdir(\Yii::$app->getModule('task')->params['taskAttachment'], 0777, true); 
        } 
        $path = $model->getImageFile(); 
        $file->saveAs($path); 
       } 
       Yii::$app->session->setFlash("task-success", "Atividade incluída com sucesso!"); 

       \Yii::$app->mailer->compose('@app/mail/task') 
       ->setFrom('[email protected]') 
       ->setTo($model->responsible->email) 
       ->setSubject(Yii::$app->params['appname'].' - '.\Yii::$app->getModule('task')->params['taskModuleName']. ' - Nova Tarefa : #'. $model->id) 
       ->send(); 

       return $this->redirect(['index']); 
      } else { 
       // error in saving model 
      } 
     } 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 

答えて

1

public function actionCreate() 
    { 
     $model = new Todolist(); 

     if ($model->load(Yii::$app->request->post())) { 

      $file = $model->uploadImage(); 

      $transaction = $model->getDb()->beginTransaction(); 

      try{ 
       if ($model->save()) { 

        if ($file !== false) { 

         $idfolder = Yii::$app->user->identity->id; 

         if(!is_dir(\Yii::$app->getModule('task')->params['taskAttachment'])){ 
         mkdir(\Yii::$app->getModule('task')->params['taskAttachment'], 0777, true); 
         } 
         $path = $model->getImageFile(); 
         $file->saveAs($path); 
        } 
        Yii::$app->session->setFlash("task-success", "Atividade incluída com sucesso!"); 

        \Yii::$app->mailer->compose('@app/mail/task') 
        ->setFrom('[email protected]') 
        ->setTo($model->responsible->email) 
        ->setSubject(Yii::$app->params['appname'].' - '.\Yii::$app->getModule('task')->params['taskModuleName']. ' - Nova Tarefa : #'. $model->id) 
        ->send(); 

        return $this->redirect(['index']); 
        }     
      } 
      catch(Exception $e) 
      { 
       $transaction->rollBack(); 
       throwe $e; 
       //unlik savedFile if exist 
      } 

     } 

     return $this->render('create', [ 
      'model' => $model, 
     ]); 

    } 

またはデータベース内のメールを保存するとcron

+0

右を経由して送信するメールキューを使用します(メールがsendedではなかった場合、モデルを保存していない)、これを試してみてください。 モデルを保存することが優先され、電子メールがトリガーされます。 私はキューメールを使用しようとします。 – gugoan

+0

私はイベントのメカニズムを使用することをお勧めします$ model-> triiger( 'SEND_MAIL_EVENT、new Event); – zakrzu

+0

イベントの仕組みはどのように機能しますか? – gugoan