使用$ this-> templating-> render()在电子邮件正文中嵌入图像

时间:2014-02-14 16:52:57

标签: image symfony swiftmailer

我正在使用方法中的下一个代码发送一种电子邮件:

    $message = \Swift_Message::newInstance('smtp.gmail.com', 465, 'ssl')
        ->setSubject($this->translator->trans("Invitación a la comunidad %community%", array(
            '%community%' => $community->getNiceName()
        )))
        ->setFrom('manolez@gmail.com', 'contact') // TODO DRY
        ->setTo($email)
        ->setReplyTo($inviter->getEmail(), $inviter->getFullName())
        ->setContentType('text/html')
        ->setBody($this->templating->render(
            'ProInvitationsBundle:Invitations:inviteEmail.html.twig',
            array('community' => $community, 'inviter' => $inviter)));

我想在身体上嵌入一个图像,所以我可以这样做:

    $message = \Swift_Message::newInstance('smtp.gmail.com', 465, 'ssl')
        ->setSubject($this->translator->trans("Invitación a la comunidad %community%", array(
            '%community%' => $community->getNiceName()
        )))
        ->setFrom('manolez@gmail.com', 'contact') // TODO DRY
        ->setTo($email)
        ->setReplyTo($inviter->getEmail(), $inviter->getFullName())
        ->setContentType('text/html')
        ->setBody('<html><head></head><body>Here is an image <img src="' .
             $message->embed(Swift_Image::fromPath('http://site.tld/logo.png')) .
         '" alt="Image" />' .
         '  Rest of message' .
         ' </body></html>');

但是这样,$message还没有定义,我也无法渲染我的模板。想知道如何将图像嵌入到我定义的模板中吗?

2 个答案:

答案 0 :(得分:5)

试试这个:

$message = \Swift_Message::newInstance();
$imgUrl = $message->embed(Swift_Image::fromPath('http://site.tld/logo.png'));
$message->setSubject($this->translator->trans("Invitación a la comunidad %community%", array(
        '%community%' => $community->getNiceName()
    )))
    ->setFrom('manolez@gmail.com', 'redConvive') // TODO DRY
    ->setTo($email)
    ->setReplyTo($inviter->getEmail(), $inviter->getFullName())
    ->setBody($this->templating->render(
        'ProInvitationsBundle:Invitations:inviteEmail.html.twig',
        array('community' => $community, 'inviter' => $inviter, 'url'=>$imgUrl)
    ), 'text/html');

有关如何使用SwiftMailer的更多详细信息,Read the Documentation总是好的

更新

要将图像包含在树枝模板中,您可以像使用任何其他树枝变量一样使用它:

<img src="{{ url }}">

答案 1 :(得分:0)

我只是想补充一下Sehael的回答。

这是您生成完整网址的方式。您可以使用请求服务获取基本URL:

$request = $this->container->get('request');
$baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();

$url = $baseurl . '/img/logo.png';