Страница 1 из 1
Отправка почты с вложением
Добавлено: 2018.09.19, 16:27
Kven
Здравствуйте! Прошу помощи, функция описанная ниже формирует pdf документ, возможно ли описать функцию так, чтобы была отправка письма и данный формируемый документ налету прикреплялся к письму. Вопрос в том, как правильно описать функцию отправки письма с подобным вложением?
Код: Выделить всё
public function actionMail($id)
{
$model = $this->findModel($id);
$this->layout = 'pdf';
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
$headers = Yii::$app->response->headers;
$headers->add('Content-Type', 'application/pdf');
$content = $this->renderPartial('_forma', ['model'=>$model]);
$pdf = new Pdf([
'mode' => Pdf::MODE_UTF8,
'format' => Pdf::FORMAT_A4,
'orientation' => Pdf::ORIENT_LANDSCAPE,
'destination' => Pdf::DEST_BROWSER,
'content' => $content,
'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css',
'cssInline' => '.kv-heading-1{font-size:18px}',
'options' => ['title' => 'Krajee Report Title'],
]);
return $pdf->render();
}
Re: Отправка почты с вложением
Добавлено: 2018.09.19, 16:35
lenbord
Код: Выделить всё
/**
* Send user order message.
*
* @static
* @param \frontend\modules\product\models\Order $order Order model.
* @return bool
*/
public static function sendUserOrderLetter(Order $order)
{
$template = EmailTemplate::findTemplateUserOrder();
if (!$template) {
return false;
}
$text = $template->getTextWithReplacedPlaceholdersUserOrder($order);
$mailer = Yii::$app->mailer;
$content = Yii::$app->view->renderFile('@app/modules/product/views/order/generate-pdf.php', ['modelOrder' => $order]);
$pdf = new Pdf([
'mode' => Pdf::MODE_UTF8,
'format' => Pdf::FORMAT_A4,
'cssFile' => Yii::getAlias('@frontend/web/css/pdf.css'),
'destination' => Pdf::DEST_BROWSER,
'content' => $content,
'options' => ['title' => 'Order Report'],
]);
$api = $pdf->getApi();
$api->SetFooter(Yii::$app->view->renderFile('@app/modules/product/views/order/pdf-footer.php'));
$fileName = md5(time()) . '.pdf';
$filePath = Yii::getAlias('@frontend/runtime/' . $fileName);
$attachment = $pdf->output($content, $filePath, Pdf::DEST_FILE);
$result = $mailer->compose()
->setFrom([$mailer->transport->getUsername() => $template->from])
->setTo($order->orderShippingInformation->email)
->setHtmlBody($text)
->setSubject($template->subject)
->attach($filePath)
->send();
unlink($filePath);
return $result;
}
вот как я это делал, думаю сможешь понять что к чему))
Re: Отправка почты с вложением
Добавлено: 2018.09.20, 09:36
Kven
Я не так давно работаю с YII2, попробовал воспользоваться Вашей функцией, но скорее всего я ее как-то неправильно изменил под свои нужды.
Ошибка
Код: Выделить всё
fopen(/upload/documents/rctp/pdf/4cb22cfa360ff00f1065aa86c6c64305.pdf): failed to open stream: No such file or directory
Контроллер
Код: Выделить всё
public function actionPdf($id)
{
$model = $this->findModel($id);
// $content = Yii::$app->view->renderFile('@app/modules/product/views/order/generate-pdf.php', ['modelOrder' => $order]);
$content = Yii::$app->view->renderFile('@app/views/order/_forma.php', ['model'=>$model]);
$pdf = new Pdf([
'mode' => Pdf::MODE_UTF8,
'format' => Pdf::FORMAT_A4,
'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.css',
'orientation' => Pdf::ORIENT_LANDSCAPE,
'destination' => Pdf::DEST_BROWSER,
'content' => $content,
'options' => ['title' => 'Портал'],
]);
$fileName = md5(time()) . '.pdf';
$filePath = Yii::getAlias('@web/upload/documents/rctp/pdf/' . $fileName);
$attachment = $pdf->output($content, $filePath, Pdf::DEST_FILE);
$result = Yii::$app->mailer->compose()
->setFrom('*****@mail.ru')
->setTo($model->email)
->setHtmlBody($text)
->setSubject('Портал')
->attach($filePath)
->send();
unlink($filePath);
return $result;
}
Re: Отправка почты с вложением
Добавлено: 2018.09.20, 12:58
andku83
Код: Выделить всё
$filePath = Yii::getAlias('@web/upload/documents/rctp/pdf/' . $fileName);
заменить на:
Код: Выделить всё
$filePath = Yii::getAlias('@app/web/upload/documents/rctp/pdf/' . $fileName);
если не будет работать уточните какое приложение (basic/advanced)
Re: Отправка почты с вложением
Добавлено: 2018.09.20, 13:55
urichalex
Перед тем, как что-то записывать в папку, надо проверить, есть ли эта папка. И, если нет, создать, или выбрать другую
Re: Отправка почты с вложением
Добавлено: 2018.09.20, 14:18
Kven
Спасибо большое, все помогло!
Ошибка была в этом:
Надо было как и написали
Re: Отправка почты с вложением
Добавлено: 2018.09.20, 14:39
someweb
А если не в папке web, а в какой нибудь public_html на шаред хостинге?
Re: Отправка почты с вложением
Добавлено: 2018.09.20, 16:23
andku83
будет правильнее (сразу не вспомнил этого алиаса).
А вот насчет того где на хостинге это лежит - то это не имеет значения: '@webroot' == '@app/web' в 99% случаях.
А если продолжать тему хостингов, то файлы могут лежать и на поддомене, тогда там уже будут свои алиасы.