在actionCreate上发送邮件

时间:2016-12-21 12:41:18

标签: yii2

我有一个由内联网运作的系统,我想知道如何最好地在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('intranet@sicoobcrediriodoce.com.br')
                ->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 个答案:

答案 0 :(得分: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('intranet@sicoobcrediriodoce.com.br')
                    ->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发送