@KevinSmash

Как отправить письмо PDF файлом?

Здравствуйте, пытаюсь реализовать функцию отправки счета на почту. В представлении напротив каждого email есть кнопка отправить сообщение. Создан отдельный файл send в котором прописан html код счёта. И в контроллере соответственно public function actionSend($id)
{
        $this->layout = 'pdf';
        Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
        $headers = Yii::$app->response->headers;
        $headers->add('Content-Type', 'application/pdf');
        $model = $this->findModel($id);
        $pdf = new Pdf([
            'mode' => Pdf::MODE_UTF8, // leaner size using standard fonts
            'content' => $this->render('send', ['model'=>$model]),
            'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css',
            'cssInline' => '.img-circle {border-radius: 50%;}',
            'options' => [
                'title' => $model->title,
                'subject' => 'PDF'
            ],
            'methods' => [
                'SetFooter' => ['|{PAGENO}|'],
            ]
        ]);
        $content = $pdf->content;
        $filename = $pdf->filename;
        $sendemail=Yii::$app->mailer->compose()
            ->attachContent($content, [
                'fileName'    => $filename,
                'contentType' => 'application/pdf'
            ])
            ->setFrom('nik.obaturov@yandex.ru')
            ->setTo('nik.obaturov@yandex.ru')
            ->setSubject('Проверка')
            ->send();
        return $pdf->render();
    }

По итогу он на сайте пытается открыть PDF файл, но выходит ошибка что не удалось это сделать, и на почту соответсвенно ничего не приходит.
$model = $this->findModel($id);
        Yii::$app->mailer->compose()
            ->setFrom('nik.obaturov@yandex.ru')
            ->setTo('nik.obaturov@yandex.ru')
            ->setSubject('Проверка подписки')
            ->setTextBody($this->render('send', ['model' => $model]))
            ->send();

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

При использовании этого кода, файл приходил чистым html кодом. Вопрос что не так
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
1. Какую библиотеку используете? Что в new Pdf?
2. проверьте что в $content
3. посмотрите логи, возможно сбой отправки почты никак не связан с pdf
4.
но выходит ошибка что не удалось

где реальный код ошибки?
5. Какой смысл менять шаблон $this->layout = 'pdf'; если потом рендерить страницу минуя фреймворк? Я так понимаю вместо return $pdf->render(); должно быть или return $this->renderPartial($pdf->render());
или же
return $this->renderContent($pdf->render());
зависимо от того, что дает метод render в известной только Вам библиотеке
подробнее есть в api к framework:
https://www.yiiframework.com/doc/api/2.0/yii-base-...
https://www.yiiframework.com/doc/api/2.0/yii-base-...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы