Yii2 - 在线生成PDF并附加到电子邮件

5
这是我生成PDF页面的方法。
public function actionPdf(){
    Yii::$app->response->format = 'pdf';
    $this->layout = '//print';
    return $this->render('myview', []);
}

这是我发送电子邮件的方式。
$send = Yii::$app->mailer->compose('mytemplate',[])
    ->setFrom(Yii::$app->params['adminEmail'])
    ->setTo($email)
    ->setSubject($subject)
    ->send();

我该如何在生成PDF文件后,实现快速将其附加到我的邮件中发送?
3个回答

7

Mailer有一个名为attachContent()的方法,您可以在其中放置pdf文件。

应将PDF呈现为字符串输出目标,并将其作为参数传递给attachContent()

示例:

Yii::$app->mail->compose()
   ->attachContent($pathToPdfFile, [
        'fileName'    => 'Name of your pdf',
        'contentType' => 'application/pdf'
   ])
   // to & subject & content of message
   ->send();

好的回答,如果有代码示例会更好。 - user3574492
1
@user3574492,这是给你的 ;) - Yupik
2
如果它是文件路径,那么应该使用attach()而不是attachContent(),对吗? - tomekK
@tomekK是对的。我建议你在你的示例中将attachContent更改为attach。当文件是即时创建的时,attachContent很有用,但当第一个参数是文件路径时,它将不能按预期工作。对于已经存在并且可以在某个路径上获得的文件,attach是适当的选项。请参阅文档:https://www.yiiframework.com/doc/guide/2.0/zh-CN/tutorial-mailing#file-attachment - Ciprian Stoica

4
这是我是如何完成的
在我的控制器中:
$mpdf=new mPDF();
$mpdf->WriteHTML($this->renderPartial('pdf',['model' => $model])); //pdf is a name of view file responsible for this pdf document
$path = $mpdf->Output('', 'S'); 

Yii::$app->mail->compose()
->attachContent($path, ['fileName' => 'Invoice #'.$model->number.'.pdf',   'contentType' => 'application/pdf'])

1
这是我在Yii2中发送邮件的方式。
private function sendPdfAsEmail($mpdf)
    {
        $mpdf->Output('filename.pdf', 'F');
        $send = Yii::$app->mailer->compose()
        ->setFrom('admin@test.com')
        ->setTo('to@gmail.com')
        ->setSubject('Test Message')
        ->setTextBody('Plain text content. YII2 Application')
        ->setHtmlBody('<b>HTML content.</b>')
        ->attach(Yii::getAlias('@webroot').'/filename.pdf')
        ->send();
        if($send) {
            echo "Send";
        }
    }
  1. mpdf实例传递给我们的自定义函数。
  2. mpdf中使用F选项将输出保存为文件。
  3. 在Yii邮件服务中使用attach选项并设置保存文件的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接