добавить встроенное изображение в сообщение, отправленное с помощью swiftmailer

Пожалуйста, извините мой php, но я использую Swiftmailer для отправки писем с веб-сайта клиентов. Они попросили добавить изображение или два в качестве подписи и т. Д. И поэтому смотрят на спецификацию swiftmailer здесь

http://swiftmailer.org/docs/messages.html

Они предлагают либо добавить встроенное изображение, подобное этому

$message->embed(Swift_Image::fromPath('http://site.tld/image here')) 

или как это (в 2 этапа)

 $cid = $message->embed(Swift_Image::fromPath('image here')); 

затем в разделе тела электронной почты добавьте

 <img src="' . $cid . '" alt="Image" />' 

Оба этапа ive попытались, но безрезультатно. Когда я нажимаю кнопку отправки электронной почты, я получаю эту ошибку, которую я не знаю, что с этим делать.

 Call to a member function embed() on a non-object in /home/content/78/5152878/html/4testing/erase/ask-doc-proc2.php on line 89 

Единственное, что я добавил к моему уже рабочему коду и электронной почте, – это код изображения непосредственно из примера на страницах документов. Эта ошибка, очевидно, запрещает отправку электронной почты. если я удалю его, он отправит письма в порядке. Поскольку мне нужно добавить изображение к этому,

Любая помощь приветствуется. спасибо

edit: это часть, в которой построено электронное письмо и отправлено $ cid = $ message-> embed (Swift_EmbeddedFile :: fromPath (' http://img.ruphp.com/php/pic.jpg '));

 ->setTo( $docEmail) ->setBody("Hello" . "\r\n\r\n" . $fullName . " has visited MyForeCYTE.com. Upon their visit they have requested to learn more about the test. \r\n\r\n" . "Please visit www.ClarityWomensHealth.com to find out more about The ForeCYTE Breast Health Test, or call our customer support line at 1 (877) 722-6339. \r\n\r\n" . "We look forward to hearing from you. \r\n\r\n" . "Thank You," , 'text/plain') ->addPart("Hello" . ",</b><br/><br/>" . "<b>" . $fullName . "</b> has visited www.MyForeCYTE.com. Upon their visit they have requested to learn more about the test. <br/>" . "Please visit www.ClarityWomensHealth.com to find out more about The ForeCYTE Breast Health Test, or call our customer support line at 1 (877) 722-6339.<br/> " . "We look forward to hearing from you. <br/><br/><br/>" . "<img src='" . $cid. "' alt='pic'/>" . "Thank you " , 'text/html') ; 

В конце концов, я нашел альтернативное решение. Swiftmailer позволяет использовать 2 метода для выполнения одного и того же.

одна – функция embed ()

а другой – функция attach ()

поэтому в код выше я удалил «embed ()», так как он не работал для меня и добавил эти 2 строки ниже, и он работает

  ->attach(Swift_Attachment::fromPath('path to image here.jpg') ->setDisposition('inline')); 

и он работал на 100%

Ни один из ответов не работал для меня. Мне пришлось включать встроенные изображения, используя CID. Что я должен был сделать, чтобы он работал:

 $attachment = Swift_Image::newInstance($data, $filename, $mimeType) ->setDisposition('inline'); $cid = $message->embed($attachment); // Generates "cid:something" 

Важная часть – использование класса Swift_Image. Тогда изображение в html должно быть:

 <img src="cid:something" ... /> 

Я думаю, что это решение работает без какого-либо взлома с swiftmailer (версия 5.4.2). Именно так написано в документации.

Не забудьте проверить несколько почтовых клиентов (gmail, thunderbird, apple mail, веб-клиенты …), если работают встроенные изображения. Например, используя Swift_Attachment, встроенные изображения отображаются в gmail, но не у некоторых веб-клиентов. Используя Swift_Image, он работал везде.

Принятый ответ не работает (версия протестирована: 5.4.2). (Мое работает, но может быть усовершенствовано)

Вместо этого, заглядывая в «Оригинал» (Gmail: Показать оригинал), я обнаружил, что swiftmailer не добавляет 2 вложения, а именно:

 Content-ID: <ABC123> X-Attachment-Id: ABC123 

ABC123 – это цид, который мы должны положить в тело, где мы хотим, чтобы строка была показана:

Итак, благодаря этому вопросу : я нашел способ исправить это для swiftmailer (это даже против документации swiftmailer, но она работает, в то время как у них нет)

это окончательный (уродливый) код:

 $attachment = Swift_Attachment::fromPath('image.jpg')->setDisposition('inline'); $attachment->getHeaders()->addTextHeader('Content-ID', '<ABC123>'); $attachment->getHeaders()->addTextHeader('X-Attachment-Id', 'ABC123'); $cid = $message->embed($attachment); $img = '<img src="cid:ABC123"/>'; $html = " <html> <head> </head> <body> $img </body> </html> "; $message->setBody($html, 'text/html');