繁体   English   中英

PHP Symfony 2.8 Swiftmailer软件包2.5,通过代码创建带有PDF附件的消息

[英]PHP Symfony 2.8 Swiftmailer bundle 2.5, create message with PDF attachment from code

我正在尝试使用Symfony 2.8和SwiftMailer Bundle 2.5创建SwiftMailer消息,在其中我将带有​​简单HTML消息的PDF发送到地址。 我可以发送电子邮件,但是所有示例代码都使用诸如addPart()和attach()之类的方法,这些方法在Swift_Message给出的方法列表中不存在,并且找不到任何使用其他方法的示例。

我从渲染的Twig模板创建PDF,然后创建一条消息以将其附加到

$pdf = $this->get('knp_snappy.pdf')->getOutputFromHtml($response);

$message = \Swift_Message::newInstance()
                ->setSubject('Hello Email')
                ->setFrom('send@example.com')
                ->setTo('recipient@example.com')
                ->setBody(
                    $this->renderView(
                    // app/Resources/views/Emails/registration.html.twig
                        'Emails/registration.html.twig',
                        array('name' => "test")
                    ),
                    'text/html'
                );

附件: $attachment = \\Swift_Attachment::newInstance($pdf, $pdf_name, 'application/pdf');

$message->addPart($attachment, $contentType = "application/pdf", $charset = null);

$message->attach(\Swift_Attachment::fromPath('/path/to/image.jpg')->setFilename('myfilename.jpg'));

方法根本不存在。

奇怪的是,高亮消息说

Method 'attach' not found in class \Swift_Mime_MimePart less...
Referenced method is not found in subject class.

但是,鉴于Swift_Mime_MimePart类在类层次结构中位于向上几层,并且从未在代码中直接调用或引用过,因此我无法成功地弄清消息的来源或如何正确调用消息类。

查看所有被调用的方法,它们都以return $this结尾,该返回值将对象的实例作为泛型类型返回,该方法位于该类的最低层次结构中。

由于PHP中没有加载通用类型,因此setBody返回Swift_Mime_MimePart而其他方法返回Swift_Mime_SimpleMessage ,而不是? extends Swift_Mime_MimePart ? extends Swift_Mime_MimePart? extends Swift_Mime_SimpleMessage ? extends Swift_Mime_SimpleMessage 因为该示例将消息设置在同一链中,并且setBody是最后一个调用的方法,所以$message现在是Swift_Mime_MimePart而不是attach()方法和其他方法所在的Swift_Message

因此,解决方案非常简单。 将调用放在单独的行上,以便$ message保持为Swift_Message

$message = \Swift_Message::newInstance();
$message->setSubject('Hello Email')
$message->setFrom('send@example.com')
$message->setTo('recipient@example.com')
$message->setBody(
                    $this->renderView(
                    // app/Resources/views/Emails/registration.html.twig
                        'Emails/registration.html.twig',
                        array('name' => "test")
                    ),
                    'text/html'
                );
$attachment = \Swift_Attachment::newInstance($pdf, $pdf_name, 'application/pdf');
$message->attach($attachment);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM